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

发布于 2024-07-17 10:23:29 字数 559 浏览 10 评论 0原文

我有一个 Java JFrame 类,我想在其中使用 boxlayout,但收到一条错误消息 java.awt.AWTError: BoxLayout can't be share。 我见过其他人遇到这个问题,但他们通过在内容窗格上创建框布局来解决它,但这就是我在这里所做的。 这是我的代码:

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);
    }
}

I have this Java JFrame class, in which I want to use a boxlayout, but I get an error saying java.awt.AWTError: BoxLayout can't be shared. I've seen others with this problem, but they solved it by creating the boxlayout on the contentpane, but that is what I'm doing here. Here's my code:

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);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

贱人配狗天长地久 2024-07-24 10:23:29

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

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

Your problem is that you're creating a BoxLayout for a JFrame (this), but setting it as the layout for a JPanel (getContentPane()). Try:

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);
三寸金莲 2024-07-24 10:23:29

我还发现了这个错误:

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

将 JPanel 传递给 BoxLayout 时尚未初始化。 所以像这样分割这一行:

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

这会起作用。

I've also found this error making this:

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));

This will work.

拔了角的鹿 2024-07-24 10:23:29

我认为前面的答案中需要强调的一件重要事情是 BoxLayout 的目标(第一个参数)应该与调用 setLayout 方法的容器相同,如下例所示:

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));

I think that one important thing to highlight from the previous answers is that the BoxLayout's target (the first parameter) should be the same Container that the setLayout method is being called upon as in the following example:

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));
桃酥萝莉 2024-07-24 10:23:29

如果您在 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!"));

If you're using the layout on a JFrame like:

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

The control is actually being added to the ContentPane so it will look like it's 'shared' between the JFrame and the ContentPane

Do this instead:

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文