BoxLayout не может быть общей ошибкой
у меня есть эта Java JFrame класс, в котором я хочу использовать boxlayout, но я получаю сообщение об ошибкеjava.awt.AWTError: BoxLayout can't be shared. Я видел других с этой проблемой, но они решили ее, создав boxlayout на contentpane, но это то, что я здесь делаю. Вот мой код:
class edit_dialog extends javax.swing.JFrame{
javax.swing.JTextField title = new javax.swing.JTextField();
public edit_dialog(){
setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
4 ответов:
ваша проблема в том, что вы создаете
BoxLayoutнаJFrame(this), но установив его в качестве макета дляJPanel(getContentPane()). Попробуйте:getContentPane().setLayout( new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS) );
Я также нашел эту ошибку, делая это:
JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));JPanel еще не инициализирован при передаче его в BoxLayout. Поэтому разделите эту строку следующим образом:
JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));это будет работать.
Я думаю, что одна важная вещь, которую следует выделить из предыдущих ответов, заключается в том, что цель BoxLayout (первый параметр) должна быть тем же контейнером, что и метод setLayout, как в следующем примере:
JPanel XXXXXXXXX = new JPanel(); XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));
если вы используете макет на
JFrameкак:JFrame frame = new JFrame(); frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS)); frame.add(new JLabel("Hello World!"));элемент управления фактически добавляется к
ContentPaneтаким образом, это будет выглядеть, как это "общий" междуJFrameиContentPaneвместо этого:
JFrame frame = new JFrame(); frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); frame.add(new JLabel("Hello World!"));
Comments