【问题标题】:CardLayout - making it take the least amount of space necessaryCardLayout - 使其占用最少的空间
【发布时间】:2010-11-09 14:32:58
【问题描述】:

全部,

我有一个在 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:

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

【问题讨论】:

标签: java swing cardlayout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多