我的问题是:我想要一个带有组合框和ok按钮的框架。我想从该列表中选择一个项目,然后单击确定,并根据所选项目添加一个包含新项目的新组合框。
String[] locals = {"a bunch of strings"};
JComboBox<String> localsList = new JComboBox<String>(locals);
localsList.setSelectedIndex(0);
JButton okButton = new JButton("OK");
p.add(localsList);
p.add(okButton);
okButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e) {
String value = localsList.getSelectedItem().toString();
switch(value){
case("a bunch of strings"):
JComboBox<String> concelhosList = new JComboBox<String>(concelhosL);
concelhosList.setSelectedIndex(0);
p.add(concelhosList);
}
}
});
okButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e) {
String value = concelhosList.getSelectedItem().toString();
}
});
问题是concelhosList
变量保留在第一个动作列表器中,因此第二个动作列表器不能识别它,而eclipse说我需要创建变量。
我该如何解决这个问题,还是有另一种方法可以做到这一点?
答案 0 :(得分:0)
使其成为一个成员变量,然后在actionPerformed中初始化。你也不需要2个动作监听器。只需使用if语句来检查concelhosList
是否为空。如果是的话你会忽略它而去另一个。
代码可能如下所示:
okButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e) {
if(concelhosList==null){
String value = localsList.getSelectedItem().toString();
switch(value){
case("a bunch of strings"):
concelhosList = new JComboBox<String>(concelhosL);
concelhosList.setSelectedIndex(0);
p.add(concelhosList);
}
}else{
String value = concelhosList.getSelectedItem().toString();
}
}
});
答案 1 :(得分:0)
如果您需要在其他逻辑中编写JComboBox
,只需将其提取到更高的范围。
在你的例子中,我建议将它放在第一行旁边,如下所示:
private String[] locals = {"a bunch of strings"};
private JComboBox<String> concelhosList;