【问题标题】:Making a second JCombobox visible depending on the selection of the first JComboBox根据第一个 JComboBox 的选择,使第二个 JCombobox 可见
【发布时间】:2019-11-28 22:38:17
【问题描述】:

我正在制作一个医疗药物软件程序,我希望用户能够从由类别数组填充的 jcombo 框中选择疾病类别(呼吸系统疾病、心血管疾病等)。

选择此类别后,我希望另一个 jcombobox 仅填充与该类别相关的药物。

我遇到的问题是,我似乎无法获取 jcombobox 中内容的值,并在 If 语句中使用这些值,然后用相关药物填充或显示第二个框。

 public CatergoryBar(ArrayList<Catergory> category)
{
    new GridBagLayout();
    Dimension dim = getPreferredSize();
    dim.width = 250;
    setPreferredSize(dim);
    setBorder(BorderFactory.createEtchedBorder());

    c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    c.weightx = 1;
    c.weighty = 1;
    c.fill = GridBagConstraints.NONE;

    categoryBox = new JComboBox(category.toArray()); 
    add(categoryBox, c);
    c.gridy++;



    categoryBox.addItemListener(new ItemListener() {
        @Override
        public void itemStateChanged(ItemEvent e) {
           String item = String.valueOf(categoryBox.getSelectedItem());

           if(item.equals("Respiratory Disease"))
           {
               respBox = new JComboBox(PFormulary.respDiseases.toArray()); 
               add(respBox, c);
               c.gridy++;
           }
        }
    });{

如果我在项目侦听器之外正常执行此操作,则会显示我的呼吸组合框,但一旦我将其放入项目侦听器内,当我点击“呼吸系统疾病”时,什么也不会弹出。

提前致谢!

【问题讨论】:

  • 将第二个组合框放在卡片布局的一张卡片中。在另一张卡片中放置一个空白面板。当第二个被填充时,从空白面板翻转到组合。通过使用这种方法,布局可以解释第二个组合的潜在未来外观。一般提示:1) 使用CardLayout,如this answer 所示。 2) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。
  • 谢谢你,andrew,经过一番修修补补,我已经开始工作了。但是,例如,我想根据我在第二个中单击的内容在第二个下方添加第三个 JCombobox,这仍然可行吗?
  • 我的评论中概述的方法适用于尽可能多的组合,可以压缩到 GUI 中。只需确保调用setPrototypeDisplayValue(Object) “设置用于计算 UI 部分显示尺寸的原型显示值”。我会给它预期在该组合中显示的最大字符串。

标签: java swing arraylist jcombobox


【解决方案1】:

可能重复:java swing dynamically adding components

总之,添加新组件后调用revalidate()。这是必要的,因为在侦听器中,您正在动态添加组件,因此您需要指示布局管理器重新验证并重新绘制脏区域。

【讨论】:

  • 不如如上所述使用CardLayout 最佳。
  • 只有在布局初始化时每个组件都知道的情况下,才能在空白组件和填充组件之间切换。据我所知,如果初始化后组件数量发生变化,则必须重新验证并重新绘制。因此,虽然CardLayout 可能在应用程序的这个阶段起作用,但它很可能会演变为具有更多动态需求,并且在初始化后添加和删除组件将是必要的
  • “只有在布局初始化时每个组件都已知时,才能在空白组件和填充组件之间切换。” 在这种情况下,它是 2. 两个组合框。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2011-07-17
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多