【发布时间】:2013-03-06 01:39:45
【问题描述】:
我正在尝试将JTextField 作为搜索栏添加到我的JFrame 顶部的JMenuBar。我的问题是JTextField 不断调整大小以占用JMenuBar 中的所有可用空间,我不希望这样。我试过setPreferredSize() 和setMaximum Size(),但这些都不起作用,大概是因为JMenuBar 中使用的LayoutManager 不尊重这些尺寸。我还尝试使用FlowLayout 将JTextField 添加到JPanel 并将面板添加到JMenuBar,但我得到的结果如下所示:
面板在JMenuBar 的右侧,大小似乎是正确的,但除了这个奇怪的蓝色条之外我什么都看不到。
这是(我认为)相关的代码。如果需要更多信息,请告诉我:
JPanel searchPanel = new JPanel();
searchPanel.setPreferredSize(new Dimension(100, 25));
JTextField searchBar = new JTextField(50);
String[] fields = {"title", "author", "subject", "publisher", "year", "circulating", "catalog" };
JComboBox searchFields = new JComboBox(fields);
JButton searchBtn = new JButton("search");
searchPanel.add(searchBar);
searchPanel.add(searchFields);
searchPanel.add(searchBtn);
searchPanel.setVisible(true);
fileMenu.add(open);
fileMenu.add(save);
fileMenu.add(exit);
libMenu.add(viewLib);
libMenu.addSeparator();
libMenu.add(newBook);
libMenu.add(search);
this.setJMenuBar(topBar);
topBar.add(fileMenu);
topBar.add(libMenu);
topBar.add(Box.createHorizontalGlue());
topBar.add(searchPanel);
【问题讨论】:
-
JMenuBar有自己的布局管理器,可能会忽略您的尺寸提示 -
是的,我知道,但这里肯定有解决方法。似乎我发布的那个(将 JTextField 等添加到 JPanel)会起作用,但是 JPanel 显示不正确,这是我真的不明白的地方
-
JPanel将受到与JTextField相同的限制...抱歉,需要一点思考空间 ;) -
don't use setXXSize,对于@splungebob,这 never-ever-ever 至少符合第二个近似值,非常接近实际值 :-) 实际上,我不知道不记得这些年来见过一个用例(在现实世界的应用程序中,而不是快速示例),它并没有引发比它应该解决的问题更多的问题。
标签: java swing jtextfield layout-manager preferredsize