Originariamente inviato da oronze
il problema è che pannello riga occupa 1/2 dell'altezza disponibile e tutta la larghezza...
ovviamente se al posto di pannello Riga aggiungo 2 JButton li trovo posizionati correttamente secondo il BoxLayout....
come posso fare?
La questione è che BoxLayout rispetta anche il "maximum size" dei componenti. E un JPanel per default ha un maximum size enorme.
Vedi se così inizia a piacerti di più (e nota le ultime 2 righe del costruttore di PannelloRiga):
codice:
import java.awt.*;
import javax.swing.*;
public class TestFrame extends JFrame {
public TestFrame() {
super("Test");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(500, 300);
JTabbedPane tabbed = new JTabbedPane();
JPanel tabPanel = new JPanel(new GridLayout(1, 1));
JPanel internalPanel = new JPanel();
internalPanel.setLayout(new BoxLayout(internalPanel, BoxLayout.Y_AXIS));
internalPanel.add(new PannelloRiga());
internalPanel.add(new PannelloRiga());
tabPanel.add(internalPanel);
tabbed.addTab("one", tabPanel);
getContentPane().add(tabbed);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestFrame().setVisible(true);
}
});
}
}
class PannelloRiga extends JPanel {
public PannelloRiga() {
super(new FlowLayout(FlowLayout.LEFT));
add(new JLabel("etichetta"));
add(new JTextField(20));
setMaximumSize(getPreferredSize());
setAlignmentX(Component.LEFT_ALIGNMENT);
}
}
Però prova a ridimensionare la finestra che sia piccola, vedi che i text field vanno "a capo" (dovuto al FlowLayout) ma sono "troncati" (dovuto al maximum size).