分配布局时出现错误: BoxLayout 无法共享

我有这样一个 JavaJFrame类,在这个类中我想使用一个 box 布局,但是我得到一个说 java.awt.AWTError: BoxLayout can't be shared的错误。我见过其他人遇到这个问题,但他们通过在内容窗格上创建 box 布局解决了这个问题,但这就是我在这里要做的。这是我的密码:

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);
}
}
104517 次浏览

您的问题是,您正在为 JFrame(this)创建一个 BoxLayout,但是将其设置为 JPanel(getContentPane())的布局。试试:

getContentPane().setLayout(
new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);

我还发现这个错误:

JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

The JPanel isn't initialized yet when passing it to the BoxLayout. So split this line like this:

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的,所以它看起来像是在 JFrameContentPane之间“共享”的

不如这样做:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));