Создание обертки вокруг JPanel
Мне часто нужно создать JPanel с BoxLayout. Поэтому я решил создать класс Column, пронаследованный от JPanel, в конструкторе которого будет устанавливаться нужный мне layout.
public class Column extends JPanel {
public Column() {
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}
}
Но при добавлении на окно моих панелей они не отображаются (если Column заменить на JPanel, то всё хорошо)
JFrame window = new JPanel();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setExtendedState(JFrame.MAXIMIZED_BOTH);
external_layout = new SpringLayout();
window.setLayout(external_layout);
Column panel = new Column();
panel.setBackground(Color.RED);
window.add(panel);
window.pack();
window.setVisible(true);
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Проблема не в том, что вы не можете навесить BoxLayout. Тут все верно. Вы про контент забыли. Это же BoxLayout, который построит компоненты по оси У. Только компонентов у вас нет. А если нет компонентов, то нет и панели. Попробуйте так, чтобы понять, как это работает:
import java.awt.Color;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SpringLayout;
public class Column extends JPanel {
private static final long serialVersionUID = -7253422675894324827L;
public Column() {
super();
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.add(new JLabel("test"));
}
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setExtendedState(JFrame.MAXIMIZED_BOTH);
SpringLayout external_layout = new SpringLayout();
window.setLayout(external_layout);
JPanel panel = new Column();
panel.setBackground(Color.RED);
window.add(panel);
window.pack();
window.setVisible(true);
}
}