JTextField 不断填充 JMenuBar 的空间



我试图将按钮和文本字段添加到我的jMenuBar中,即使在我设置了JTextField的PreferredSize之后,JTextField仍然继续填充我的JMenuBar上的空间。

注意:此JMenuBar是使用此方法添加的-

public static void setJPanelMenuBar(JPanel parent, JPanel child, JMenuBar menuBar) {
        parent.removeAll();
        parent.setLayout(new BorderLayout());
        JRootPane root = new JRootPane();
        parent.add(root, BorderLayout.CENTER);
        root.setJMenuBar(menuBar);
        root.getContentPane().add(child);
        parent.putClientProperty("root", root);  //if you need later
    }

该代码允许我在 JPanel 中添加一个 JMenuBar。

现在进入JMenuBar代码。

JMenuBar x = jMenuBar1;
        x.removeAll();
        JTextField searchBar = txtsearch;
        JTextField searchBar2 = new JTextField();
        searchBar2.setPreferredSize(new Dimension(10,20));
        x.add(lblsearch);
        x.add(searchBar);
        x.add(btnSearch);
        x.add(Box.createHorizontalGlue());
        x.add(searchBar2);

注意:jMenuBar1lblsearchtxtsearchbtnSearch是使用 NetBeans 创建的。

为了测试这一点,我添加了另一个名为 searchBar2 的 JTextField 并设置了首选大小,但即使在我添加了 Box Glue 之后,两者都会继续占用 JMenuBar 中剩余的空间。

任何想法为什么?

来自如何使用 BoxLayout 教程:

当 BoxLayout 从上到下布置组件时,它会尝试按组件的首选高度调整每个组件的大小。如果布局的垂直空间与首选高度的总和不匹配,则 BoxLayout 会尝试调整组件的大小以填充空间。组件要么增大,要么缩小以填充空间,BoxLayout 遵循每个组件的最小和最大大小。任何额外的空间都会显示在容器的底部。

(强调我的)

显然,这同样适用于水平框中的宽度。 在我看来,以上应该在BoxLayout的实际javadoc中,但事实并非如此。

在您的情况下,最简单的解决方案是删除对 setPreferredSize 的显式调用,而是设置每个 JTextField 的最大大小以匹配其首选大小:

searchBar.setMaximumSize(searchBar.getPreferredSize());
searchBar2.setMaximumSize(searchBar2.getPreferredSize());

BoxLayout 尝试遵循最小和最大大小。

相关内容

  • 没有找到相关文章