ecco una SSCCE:swing BoxLayout problema con JComboBox senza utilizzare setXXXSize
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BoxLayoutTest extends JFrame {
public BoxLayoutTest(){
JPanel main = new JPanel();
main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
main.setBackground(Color.red);
this.add(main);
JPanel northPanel = new JPanel();
JPanel middle = new JPanel();
middle.setLayout(new BoxLayout(middle, BoxLayout.X_AXIS));
middle.add(new JButton("FOO"));
middle.add(Box.createHorizontalGlue());
JPanel aPanel = new JPanel();
aPanel.setBackground(Color.black);
JComboBox b = new JComboBox();
//b.setPreferredSize(new Dimension(100,16)); //uncomment this to see the layout I would like to achieve
//b.setMaximumSize(new Dimension(100,16));
//middle.add(b); //uncomment this line
middle.setBackground(Color.green);
northPanel.setBackground(Color.blue);
main.add(northPanel);
main.add(middle);
main.add(Box.createVerticalGlue());
this.setSize(800,600);
this.setResizable(true);
this.setVisible(true);
}
public static void main(String[] args) {
new BoxLayoutTest();
}
}
Sto cercando di refactoring alcune classi che ho scritto qualche tempo fa, quando non sapevo che l'utilizzo di metodi setXXXSize su componenti è sbagliata . Utilizzando una cornice ridimensionabile, il risultato che voglio ottenere è la seguente:
- Il northPanel dovrebbe rimanere in cima e cambiare la sua dimensione di conseguenza per le modifiche di dimensioni telaio (sembra funzionare bene)
- Il pannello verde dove ho messo il JButton dovrebbe mantenere la dimensione massima del JButton e stare appena sotto il pannello blu sopra (questo funziona bene se metto solo JButtons all'interno di quel pannello).
Il problema si pone se inserisco un JComboBox all'interno del pannello verde (prova a decommentare la riga in SSCCE). Immagino che JComboBox non abbia una dimensione massima specificata, quindi si estende con la cornice. Nella precedente versione errata del mio codice stavo usando i metodi setxxxSize su JComboBox per limitare la sua dimensione (prova a decommentare la linea sui metodi setXXXSize per vederla).
La mia domanda è:
- E 'possibile ottenere lo stesso risultato utilizzando BoxLayout senza invocare metodi setXXXSize()?
- Se sì, come?
- c'è qualche altro LayoutManager che posso usare per ottenere in tal senso?
Prego mi ha messo nella giusta direzione
grazie per la risposta. Sembra che sia un errore di Swing, verrà risolto? – Heisenbug
@Heisenbug - non lo so, chiedi al team Swing :-) – kleopatra