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



## qbopa (22. Jan 2008)

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 

```
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
```
Wird einfach nichts beim draufklicken ausgeführt. 
und bei

```
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:


----------



## L-ectron-X (22. Jan 2008)

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:

```
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>");
   }
}
```


----------



## qbopa (23. Jan 2008)

oha vielen dank^^ . Doch etwas sehr komplizierter als ich dachte. danke für deine Mühe ^^


----------



## L-ectron-X (23. Jan 2008)

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".


----------



## lhein (23. Jan 2008)

Unter SWT geht das glaub. Aber du verwendest ja Swing.


----------



## Gast2 (23. Jan 2008)

versuch mal JWindow--> nee lass mal da ist dann alles weg =)


----------



## PELLE (23. Jan 2008)

Titelleiste kannst dir selber malen png/jpg was willst und ins JLabel laden als icon etc..


```
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);
   }
}
```


----------

