根据第一个JComboBox的选择,使第二个JCombobox可见

时间:2019-07-20 00:22:52

标签: java swing arraylist jcombobox

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

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

我遇到的问题是,我似乎无法在jcombobox中获取whats的值,而无法在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 个答案:

答案 0 :(得分:0)

可能的重复项:java swing dynamically adding components

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