У меня есть JFrame
класс Java , в котором я хочу использовать boxlayout, но получаю сообщение об ошибке java.awt.AWTError: BoxLayout can't be shared
. Я видел других с этой проблемой, но они решили ее, создав boxlayout на панели содержимого, но это то, что я здесь делаю. Вот мой код:
class EditDialog extends JFrame {
JTextField title = new JTextField();
public editDialog() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("New entity");
getContentPane().setLayout(
new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(title);
pack();
setVisible(true);
}
}
Я также обнаружил эту ошибку:
JPanel еще не инициализирован при передаче в BoxLayout. Так что разделите эту строку так:
Это сработает.
источник
Я думаю, что одна важная вещь, которую следует выделить из предыдущих ответов, заключается в том, что цель BoxLayout (первый параметр) должна быть тем же контейнером, что и метод setLayout, как в следующем примере:
источник
Если вы используете макет
JFrame
как:Управления фактически добавляются к
ContentPane
так это будет выглядеть , как будто это «общее» междуJFrame
иContentPane
Вместо этого сделайте это:
источник
JFrame
что обычно этого не требует (в отличие от AWTFrame
). ИзJFrame
документации:As a convenience, the add, remove, and setLayout methods of this class are overridden, so that they delegate calls to the corresponding methods of the ContentPane. For example, you can add a child component to a frame as follows: frame.add(child); And the child will be added to the contentPane. The content pane will always be non-null.
Кframe
они со ссылкой наJFrame
экземпляр.