我想在单击按钮 b
后检查选中了哪些复选框,但是我的复选框是在我单击按钮 b1
之后声明的
我的意思是,我应该全局声明 checkbox[]
吗?我该怎么做?
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
JCheckBox checkbox[] = new JCheckBox[3];
checkbox[0] = new JCheckBox("Red");
checkbox[1] = new JCheckBox("Blue");
checkbox[2] = new JCheckBox("Green");
}
});
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(checkbox[0].isSelected())
// do something
if(checkbox[1].isSelected())
// do something
if(checkbox[2].isSelected())
// do something
}
});
Error: checkbox cannot be resolved to a variable
复选框数组应该对两个监听器都可见。一种选择是作为实例变量。
例如(实际上不会编译,只是一个片段):
private JCheckBox[] checkboxes;
void register() {
s1.addListener(e -> {
checkboxes = new JCheckBox[3];
// do the rest
};
s2.addListener(e -> {
if(checkboxes[0].isChecked()) {
}
// ....
};
}
但是,这是一个糟糕的设计,因为 checkboxes 成员未完全初始化以供使用,这可能会导致 NullPointerException。相反,您最好在构造函数或其他东西中初始化数组。
考虑:
private JCheckBox[] checkboxes;
SomeClass() {
checkboxes = new JCheckBox[3];
// do the rest
}
void register() {
s2.addListener(e -> {
if(checkboxes[0].isChecked()) {
}
// ....
};
}
Tôi là một lập trình viên xuất sắc, rất giỏi!