首页 > 解决方案 > 根据第一个 JComboBox 的选择,使第二个 JCombobox 可见

问题描述

我正在制作一个医疗药物软件程序,我希望用户能够从由类别数组填充的 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++;
           }
        }
    });{

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

提前致谢!

标签: javaswingarraylistjcombobox

解决方案


可能重复:java swing动态添加组件

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


推荐阅读