我正在为一个数据库制作一个搜索函数,该数据库使用jtabbedpane窗格,其中一个选项卡用于快速搜索,另一个用于高级搜索。高级搜索有相当多的字段,所以它需要更大,但我不希望整个窗口始终处于最大尺寸的美学原因。我已经向窗格添加了一个更改侦听器,并尝试根据它是哪个选项卡来调整窗格的大小,当单击该选项卡时,代码将执行,但不执行任何操作。我尝试先使用tabbedSearchPane.setSize(),然后使用tabbedSearchPane.validate(),并使用setSize+validate调整其周围组件的大小,但似乎没有什么效果。我真的只需要知道如何实际更改jtabbedpane的大小。
发布于 2010-04-21 16:11:23
正如在中所描述的,正如您所观察到的,JTabbedPane
非常努力地尝试容纳最大的窗格。要从较大的窗格切换到较小的窗格,您必须将较大的窗格替换为与较小的窗格大小相同的临时窗格,并对选项卡式窗格执行invalidate()
操作;反之亦然。这是一场斗争。或者,考虑使用here提到的CardLayout
。当您想要调整封闭容器的大小时,请注意这个相关的example是如何相应地使用pack()
的。
发布于 2018-02-24 13:54:34
我像这样解决了这个问题,没有任何问题。(我的选项卡式窗格在另一个面板中继承,如果它起任何作用的话)
tabbedPane.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
switch (tabbedPane.getSelectedIndex()) {
case 0:
tabbedPane.setPreferredSize(new Dimension(1, 230));
break;
case 1:
tabbedPane.setPreferredSize(new Dimension(1, 330));
break;
case 2:
tabbedPane.setPreferredSize(new Dimension(1, 430));
break;
}
}
});
当然,当我创建我的when面板时:
tabbedPane.setPreferredSize(new Dimension(1, 230));
在此之后,我重新绘制-重新验证了jtabbed/parentpanel,但对于其他reasons...This,甚至没有在任何面板中调用repain/revalidate。
预览(红色边框=其他面板)
https://stackoverflow.com/questions/2679860
复制