La maggior parte dei gestori di layout ha costruttori senza argomenti (ovvero, è possibile creare un FlowLayout con new FlowLayout()
, un GridLayout con new GridLayout()
, un GridBagLayout con new GridBagLayout()
e così via). Tuttavia, BoxLayout
richiede di passare sia il contenitore che gestirà sia l'asse lungo il quale i componenti dovrebbero essere disposti.Perché è necessario invocare setLayout con BoxLayout?
La mia domanda è: quanto si sta già dicendo il gestore di layout quale componente per disporre, perché avete bisogno di scrivere
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
anziché solo la prima linea?
Ho dato un'occhiata veloce a the BoxLayout
source code e ho visto che il costruttore che uso (righe 178-185) non effettua una chiamata a target.setLayout(this)
o qualcosa del genere. Sembra che sarebbe davvero semplice aggiungerlo. C'è una ragione per cui non è inclusa nella libreria Swing?
Se è importante, sto usando
versione Java 1.7.0
Java (TM) SE Runtime Environment (build 1.7.0-B147)
su Win7Pro .
Grazie!
SSCCE:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class BoxLayoutSSCCE extends JFrame {
// Change this to see what I mean
public static final boolean CALL_SET_LAYOUT = true;
public BoxLayoutSSCCE() {
super("Box Layout SSCCE");
JPanel panel = new JPanel();
BoxLayout bl = new BoxLayout(panel, BoxLayout.Y_AXIS);
if (CALL_SET_LAYOUT) {
panel.setLayout(bl);
}
panel.add(new JButton("Button 1"));
panel.add(new JButton("Button 2"));
}
public static void main (String[] args) {
BoxLayoutSSCCE blsscce = new BoxLayoutSSCCE();
blsscce.pack();
blsscce.setVisible(true);
}
}
+1 per [sscce] (http://sscce.org/) – trashgod