# Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern)



## Feliband (7. Aug 2007)

Hi, 

ich habe diese Oberfläche hier erstellt. Ich habe dabei versucht das Einstellungen-Fenster aus Firefox zu kopieren. 


```
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.event.*;
import java.applet.Applet;
import javax.swing.border.*;

public class Test5 extends JFrame {
    public Test5() {
      
     JPanel mainPanel = new JPanel();
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
     mainPanel.setBorder(new EmptyBorder(5,5,5,5));
     
     JPanel topPanel = new JPanel(new GridLayout(1, 7));
     
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     topPanel.add(new JLabel(new ImageIcon("D:/black1_test.png")));
     
     mainPanel.add(topPanel);
     
     JPanel chronikPanel = new JPanel(new GridLayout(3,2));
     chronikPanel.setBorder(new TitledBorder(new EtchedBorder(), "Chronik"));
     chronikPanel.add(new JCheckBox("Besuchte Seiten speichern für die letzten"));
     JTextField text = new JTextField(10);
     chronikPanel.add(text);
     chronikPanel.add(new JCheckBox("Datei speichern, die in Formulare und die Suchleiste " +
       "eingegeben werden"));
     chronikPanel.add(new JLabel(""));
     chronikPanel.add(new JCheckBox("Heruntergeladene Dateien merken"));
     chronikPanel.add(new JLabel(""));
     
     mainPanel.add(chronikPanel);
     
     JPanel cookiesPanel = new JPanel(new BorderLayout());
     cookiesPanel.setBorder(new TitledBorder(new EtchedBorder(), "Cookies"));
     JPanel cookiesPanelLeft = new JPanel(new GridLayout(2,2));
     cookiesPanelLeft.add(new JCheckBox("Cookies akzeptieren"));
     cookiesPanelLeft.add(new JLabel(""));
     cookiesPanelLeft.add(new JLabel("Behalten, bis"));
     JComboBox box = new JComboBox();
     box.addItem("sie nicht mehr gültig sind");
     cookiesPanelLeft.add(box);
     cookiesPanel.add(cookiesPanelLeft, BorderLayout.WEST);
     JPanel cookiesPanelRight = new JPanel(new GridLayout(2,1));
     cookiesPanelRight.add(new JButton("Cookies anzeigen"));
     cookiesPanelRight.add(new JButton("Cookies anzeighen"));
     
     cookiesPanel.add(cookiesPanelRight, BorderLayout.EAST);
     
     mainPanel.add(cookiesPanel);
     
     JPanel privatePanel = new JPanel(new GridLayout(2,2));
     privatePanel.setBorder(new TitledBorder(new EtchedBorder(), "Private Daten"));
     privatePanel.add(new JCheckBox("Private Daten löschen, wenn Firefox beendet wird"));
     privatePanel.add(new JButton("Einstellungen"));
     privatePanel.add(new JCheckBox("Vor dem Löschen von privaten Daten fragen"));
     privatePanel.add(new JButton("Jetzt löschen"));
     
     mainPanel.add(privatePanel);
     
     JPanel bottom = new JPanel(new GridLayout(1, 3));
     bottom.add(new JButton("Ok"));
     bottom.add(new JButton("Abbrechen"));
     bottom.add(new JButton("Hilfe"));
     bottom.setBorder(new EmptyBorder(50, 5, 5, 5));
     
     mainPanel.add(bottom);
      
      getContentPane().add(mainPanel, BorderLayout.CENTER);
      
      pack();
    
    WindowListener wndCloser = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };
    addWindowListener(wndCloser);
    setVisible(true);
  }
  
  public static void main(String[] args) {
      new Test5();
  }
}
```

Wie kann ich die Buttons und das Textfeld verkleinern? Wie kann ich den Abstand zwischen den Bildern verringern? Ich habe mal setPreferredSize() auf die Buttons angewendet, hat aber die Größe nicht verändert. Findet Ihr meine Vorgehensweise gut? Damit meine ich wie ich die Panels verschachtelt habe.

So sieht das bei mir aus: www.chrimori.de/gui.jpg


----------



## Wildcard (7. Aug 2007)

GridLayout erlaubt keine Einflußnahme auf die Größe der Komponenten. -> flexibleren LayoutManager verwenden.


----------



## Feliband (8. Aug 2007)

Danke für die schnelle Antwort. 

Welcher wäre hier denn besser? Ich versuche es nochmal mit GridBag.


----------



## Hilefoks (8. Aug 2007)

GridBag ist auf jeden Fall einer der flexibelsten - aber leider ist er auch nicht besonders einfach zu handhaben (siehe diese Animation. ;-) ).

Als alternative zu GridBag bietet sich JGoodies Forms und TableLayout an. Letzterer ist wirklich einfach zu bedienen und sehr flexible. 

MfG,
Hilefoks


----------



## Feliband (10. Aug 2007)

Die Animation ist lustig. Ich benutze jetzt TableLayout - vom allerfeinsten.


----------



## The_S (10. Aug 2007)

Hilefoks hat gesagt.:
			
		

> Als alternative zu GridBag bietet sich JGoodies Forms und TableLayout an. Letzterer ist wirklich einfach zu bedienen und sehr flexible.



Wobei ersteres auch sehr einfach zu bedienen und sehr flexibel ist. Und da kannst du dir dann auch noch das LaF von JGoodies ziehen, dann schaut deine Anwendung noch sehr fein aus  .


----------

