4

全部,

我有一个用 Java 创建的表单类型视图。根据组合框的内容,我需要切换表单的某些方面。我正在使用卡片布局来执行此操作,并且效果很好。

问题是卡片布局使用添加到它们的组件的所有首选尺寸中的最大值来确定它们自己的首选尺寸。这意味着当我选择具有较少字段的选项时,由于切换器组件上卡片布局的首选大小,会出现空白。

每次选择更改时,我都尝试手动更改卡片布局面板的首选大小,但这没有效果 - 面板始终是适合所有组件的最大值。

combo.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {
            Dimension preferredSize = null;
            switch (combo.getSelectedIndex()) {
                case 0:
                    preferredSize = panel0.getPreferredSize();
                    break;
                case 1:
                    preferredSize = panel1.getPreferredSize();
                    break;
                case 2:
                    preferredSize = panel2.getPreferredSize();
                    break;
                default:
                    assert false;
            }
            patternOptions.setPreferredSize(preferredSize);
            c.show(patternOptions, TYPE[combo.getSelectedIndex()]);
        }
    });

简而言之,我希望 UI 在选择需要更多空间的选项时动态增长,并在需要更少空间时缩小,就像 iTunes 智能列表 UI 一样:

替代文字 替代文字

(我意识到这是一个稍微不同的问题,但它说明了我想要什么 - 包含约束字段的面板根据行数增长。我需要我的布局根据选项数量增长,基于组合框选择)

4

2 回答 2

2

您可以继承 CardLayout 并覆盖该preferredLayoutSize方法,以便它只考虑当前卡片。

为确保框架扩大和缩小,您可能需要pack在设置内容大小后调用。不确定这是否适用于所有情况(它可能不会缩小),但值得一试。

于 2010-11-09T14:36:23.027 回答
1

听起来您应该为每个表单使用 JDialog。

或者不要打扰使用 CardLayout 并手动删除/替换每个面板,然后 pack() 对话框。

于 2010-11-09T16:03:40.877 回答