2016-05-15 10 views
0

Ich habe 5 JPanels vertikal aufgereiht. Jede JPanel ist mit denselben Elementen, aber unterschiedlichen Werten gefüllt (JPanel, JButton, JLabel). Ich möchte, dass sie wie folgt aussehen:GridBagLayout nicht anstehen

Panel Button Label 
Panel Button Label 

Buts es Ausdrehen wie diese

Panel Button Label 
Panel Button  Label 

Der Abstand ein wenig aus, aber der Code ist genau das gleiche für jeden Behälter. Wie kann ich das beheben?

public class AnswerChoice extends JPanel { 
    private static final long serialVersionUID = 1L; 

    private AnswerButton button; 
    private JLabel answerLabel; 

    public AnswerChoice(String imageURL) { 
     setBackground(Color.RED); 
     setLayout(new GridBagLayout()); 
     button = new AnswerButton(imageURL); 
     answerLabel = new JLabel(); 
     answerLabel.setFont(new Font("Times New Roman", Font.PLAIN, 32)); 

     GridBagConstraints gbc = new GridBagConstraints(); 

     JPanel panel = new JPanel(); 
     panel.setBackground(Color.ORANGE); 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridx = 1; 
     gbc.weightx = 0.2; 
     add(panel, gbc); 

     gbc.fill = GridBagConstraints.NONE; 
     gbc.gridx = 2; 
     gbc.weightx = 0.0; 
     gbc.insets = new Insets(0, 0, 0, 30); 
     add(button, gbc); 

     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridx = 3; 
     gbc.weightx = 0.8; 
     add(answerLabel, gbc); 
    } 

} 

Die JLabel tut Text drin, aber ich stelle es woanders.

+0

Wahrscheinlich möchten Sie 'gbc.anchor = GridBagConstraints.BASELINE_LEADING;'. Das Ankerfeld bestimmt die Platzierung einer Komponente in ihrer Zelle. – VGR

+2

Es scheint, dass eine 3-Spalten-Tabelle besser für die Anzeige der Daten geeignet wäre. Unterschiedliche 'GridBagLayout'-Instanzen in verschiedenen Bereichen können nicht aneinander ausgerichtet werden! –

+0

Kann ich einen proportionalen Abstand in einer Tabelle angeben? Ich habe das 'GridBagLayout' verwendet, so dass ich die 0.2- und 0.8-Gewichte – kneedhelp

Antwort

4

aber der Code ist genau der gleiche für jeden Container.

Das Layout wird unabhängig für jeden Container basierend auf den dem Container hinzugefügten Komponenten erstellt. Daher ist die Größe jeder Komponente auf dem Container wichtig. Jeder Container weiß nicht, dass Sie 4 andere Container haben.

Ich habe 5 JPanels vertikal aufgereiht.

Also dann müssen Sie ein einzelnes Panel mit einem GridBagLayout erstellen und alle 15 Komponenten zu diesem Panel hinzufügen. Dann werden alle 3 Spalten basierend auf den Komponenten in jeder der 5 Zeilen sortiert.

Oder ich sehe in Ihrer Logik, dass Sie versuchen, relative Größen zu jeder der 3 Komponenten als .2, 0,. In diesem Fall könnten Sie die Relative Layout auf jedem der Panels verwenden. Unter Verwendung der Relative Layout würden Sie den Knopf in seiner bevorzugten Größe anzeigen und dann 0.2f und 0.8f als die Beschränkungen für die Verkleidung und das Etikett verwenden.

+0

Das ist ein tolles Layout, genau das, was ich gesucht habe! Vielen Dank! – kneedhelp