我正在制作医疗软件程序,我希望用户能够从由类别数组填充的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++;
}
}
});{
如果我通常在项目侦听器外部执行此操作,则会显示我的呼吸组合框,但是当我将其放入项目侦听器内部时,单击“呼吸系统疾病”就不会弹出任何内容。
谢谢!
答案 0 :(得分:0)
可能的重复项:java swing dynamically adding components
总而言之,添加新组件后调用revalidate()
。这是必要的,因为在侦听器中,您是动态添加组件的,因此您需要指示布局管理器重新验证和重新绘制脏区域。