0

我正在为使用 jtabbedpane 的数据库创建搜索功能,其中一个选项卡用于快速搜索,一个选项卡用于高级搜索。高级搜索有更多的字段,因此需要更大,但出于美学原因,我不希望整个窗口始终处于最大尺寸。我在窗格中添加了一个更改侦听器,并尝试根据它所在的选项卡调整窗格的大小,并且在单击选项卡时执行代码,但什么也不做。我尝试使用 tabbedSearchPane.setSize() 后跟 tabbedSearchPane.validate(),以及使用 setSize+validate 调整其周围组件的大小,但似乎没有任何作用。我真的只需要知道如何实际更改 jtabbedpane 的大小。

4

2 回答 2

1

正如Tabs 中的 Preferred Size 中所述,并且正如您所观察到的,我们JTabbedPane非常努力地尝试容纳最大的窗格。要从较大的窗格切换到较小的窗格,您必须将较大的窗格替换为与较小窗格和invalidate()选项卡窗格具有相同大小的临时窗格;反过来需要走另一条路。这是一场斗争。或者,考虑使用此处CardLayout提到的。由于您将要调整封闭容器的大小,请注意此相关示例如何相应地使用。pack()

于 2010-04-21T16:11:23.360 回答
0

我像这样解决了这个问题,没有任何问题。(我的选项卡式窗格在另一个面板中继承,如果它发挥任何作用)

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

当然,当我创建我的 jtabbedpane 时:

tabbedPane.setPreferredSize(new Dimension(1, 230));

在此之后,我都重新绘制并重新验证了 jtabbed/parentpanel,但由于其他原因......这似乎可以在任何面板中调用 repain/revalidate 都没有。

预览(红色边框 = 其他面板)

在此处输入图像描述

于 2018-02-24T13:54:33.717 回答