Beim JFrame die Buttons X und ähnliches aus der Title bar.

  • Themenstarter Themenstarter qbopa
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
Q

qbopa

Gast
Hi,
Gibt es eine Möglichkeit die Buttons minimieren, maximirern und schliesen aus einem JFrame zu entfernen.

Habe 2 Möglichkeiten gefunden die aber nicht so ganz das sind was ich suche

Bei
Code:
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Wird einfach nichts beim draufklicken ausgeführt.
und bei
Code:
setUndecorated(true);
ist die Komplette Leiste weg. das heist auch dass ich das Fenster nicht mehr verschieben kann.

Ich möchte dass die Leiste zum verschieben noch da ist aber die Buttons nicht angezeigt werden. Ich hab grad schon ne ganze weile gegoogelt bin aber immer nur auf die oben genannten Lösungen gestoßen.

Kann mir da jemand weiterhelfen?


Vielen Dank :meld:
 
Die Möglichkeit die Buttons aus der Titelleiste zu entfernen gibts nicht für JDialog und JFrame, sondern nur für JInternalFrame. Wenn du eine Titelzeile ohne Buttons für einen JFrame haben möchtest, musst du das selbst programmieren. Das wäre dann sowas in der Art:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class OwnTitleFrameDemo extends JFrame {
   private JLabel titleBar;
   private JLabel messageLabel;
   private JPanel contentPanel;
   private JButton button;
   private JPanel buttonPanel;
   private int xPos, yPos;

   public OwnTitleFrameDemo(String title) {
      super();
      setUndecorated(true); //Fensterrahmen entfernen

      //neuer Fensterrahmen, ohne Titelleiste
      contentPanel = new JPanel(new BorderLayout());
      contentPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

      //Textinhalt - Message
      messageLabel = new JLabel("Du siehst dir gerade eine Demonstration eines JFrames mit eigener Titelleiste an.", SwingConstants.CENTER);
      messageLabel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
      contentPanel.add(messageLabel, BorderLayout.CENTER);

      //Titelleiste
      titleBar = new JLabel(title);
      titleBar.setOpaque(true);
      titleBar.setBorder(BorderFactory.createEmptyBorder(2,3,2,2));
      
      //Farben des Betriebssystems für Titelleisten ohne Design verwenden
      titleBar.setBackground(UIManager.getDefaults().getColor("InternalFrame.activeTitleBackground"));
      titleBar.setForeground(UIManager.getDefaults().getColor("InternalFrame.activeTitleForeground"));
      
      //MouseMotionListener für die Titelleiste
      titleBar.addMouseMotionListener(new MouseMotionAdapter() {
         public void mouseDragged(MouseEvent e) {
            Point window = OwnTitleFrameDemo.this.getLocation();
            OwnTitleFrameDemo.this.setLocation(window.x+e.getX()-xPos, window.y+e.getY()-yPos);
         }
      });

      //MouseListener für die Titelleiste
      titleBar.addMouseListener(new MouseAdapter() {
         public void mousePressed(MouseEvent e) {
            xPos = e.getX();
            yPos = e.getY();
         }
      });

      button = new JButton("OK");
      button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            System.exit(0);
         }
      });

      buttonPanel = new JPanel();
      buttonPanel.setBorder(new EmptyBorder(new Insets(0, 0, 10, 0)));
      buttonPanel.add(button);

      contentPanel.add(titleBar, BorderLayout.NORTH);
      contentPanel.add(buttonPanel, BorderLayout.SOUTH);
      add(contentPanel);

      pack();
      setLocationRelativeTo(null);
      setVisible(true);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {
         e.printStackTrace();
      }

      new OwnTitleFrameDemo("<html>[b]OwnTitleFrameDemo[/b]</html>");
   }
}
 
oha vielen dank^^ . Doch etwas sehr komplizierter als ich dachte. danke für deine Mühe ^^
 
Naja, einige Dinge könnte man raus nehmen, allerdings würde die Ansicht darunter leiden. Viele Zeilen dienen nur der optischen Anpassung ans OS, bzw. der "Verschönerung".
 
Titelleiste kannst dir selber malen png/jpg was willst und ins JLabel laden als icon etc..

Code:
public class Mp3Player extends JWindow
{
   private JLabel titleBarLB;
   private JButton exitBT;
   private int xPos, yPos;

   public Mp3Player()
   {
      setLayout(null);

      // Titelleiste
      titleBarLB = new JLabel("MP3 PLAYER",JLabel.CENTER);
      titleBarLB.setBackground(Color.BLUE.darker());
      titleBarLB.setForeground(Color.WHITE);
      titleBarLB.setOpaque(true);
      add(titleBarLB);
      titleBarLB.setBounds(0,0,300,20);
     
      // Exitbutton
      exitBT = new JButton("Exit");
      add(exitBT);
      exitBT.setBounds(50,50,30,30);

      //Verschieben des Dialogs ermöglichen
      titleBarLB.addMouseMotionListener(new MouseMotionAdapter()
      {
         public void mouseDragged(MouseEvent e)
         {
            Point window = Mp3Player.this.getLocation();
            Mp3Player.this.setLocation(window.x+e.getX()-xPos, window.y+e.getY()-yPos);
         }
      });

      //wird benötigt, um die Mausposition beim Klicken zu bestimmen
      titleBarLB.addMouseListener(new MouseAdapter()
      {
         public void mousePressed(MouseEvent e)
         {
            xPos = e.getX();
            yPos = e.getY();
         }
      });


      exitBT.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
              dispose();                         
         }
      });
   }

   public static void main(String[] args)
   {
      Mp3Player Fenster = new Mp3Player();
      Fenster.setSize(300,120);
      Fenster.setLocationRelativeTo(null);
      Fenster.setVisible(true);
   }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben