Столкнувшись с проблемой использования BoxLayoutкак установить размер компонентов внутри контейнера с BoxLayout
В моем примере, я стараюсь, чтобы уменьшить высоту текстового поля и изменить ширину кнопок (как показано на зеленый маркер на картинке). Я знаю о методах setPrefferedSize() и setMaximumSize(), но он не работает должным образом. Строка add (Box.createHorizontalGlue()) также не помогла.
Спасибо за любую идею
public class Testy extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
constructGUI();
}
});
}
private static void constructGUI() {
JFrame frame = new JFrame("Testy");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.DARK_GRAY);
centerPanel.setPreferredSize(new Dimension(100, 400));
frame.add(centerPanel, BorderLayout.CENTER);
Testy eastPanel = new Testy();
frame.add(eastPanel, BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
}
public Testy() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JButton button = new JButton("Button ...... 1");
//button.setPreferredSize(...);
//button.setMaximumSize(...);
add(button);
button = new JButton("Button 2");
//button.setPreferredSize(...);
//button.setMaximumSize(...);
add(button);
button = new JButton("Button ........... 3");
//button.setPreferredSize(...);
//button.setMaximumSize(...);
add(button);
JLabel label = new JLabel("Label");
//label.setPreferredSize(...);
//label.setMaximumSize(...);
add(label);
JTextField textField = new JTextField();
//textField.setPreferredSize(...);
//textField.setMaximumSize(...);
add(textField);
button = new JButton("Button 4");
//button.setPreferredSize(...);
//button.setMaximumSize(...);
add(button);
//add(Box.createHorizontalGlue());
}
}
В качестве быстрого средства правовой защиты, вы можете использовать вложенные макеты, в том смысле, что с правой стороны, создать 'JPanel' с' BorderLayout', поместите 'JPanel (say centerPanel)' в 'CENTER' и' JPanel (say buttonPanel) 'в' PAGE_END'. Теперь используйте новый 'JPanel (say compPanel)' с 'GridLayout' и поместите на него все компоненты и поместите этот' compPanel' внутри 'centerPanel'. Поместите 'JButton (button4)' внутри 'buttonPanel' как есть. Я думаю, это сработает :-) –
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). SSCCE должен включать импорт, определение класса и метод 'main'. –