我不知道怎么问这个。我正在处理的程序已经完成,但似乎它有过多的代码。以下是代码的一部分:
chkDef1 = new JCheckBox
if (chkDef1.isSelected()) {
actual = chkDef1.getText();
}
else if (chkDef2.isSelected()) {
actual = chkDef2.getText();
}
else if (chkDef3.isSelected()) {
actual = chkDef3.getText();
}
else {
actual = chkDef4.getText();
}
还有其他一些区域,chkDef1 - 4复选框中有很多重复的代码。我想要做的是在代码复制的区域使用循环,然后只使用1个赋值语句。
我试过了: if(('chkDef'+ counter).isSelected())
我还尝试将“'chkDef'+ counter”分配给String变量,然后添加isSelected。不幸的是我不断收到错误消息。
我是一名新手程序员,所以我不知道我想做什么或者叫什么。如果有可能解释如何被欣赏。
答案 0 :(得分:2)
只需创建一个checkboxes
列表并迭代它。
ArrayList<JCheckBox> checkboxes = new ArrayList<JCheckBox>();
//Init your checkboxes array.
for(JCheckbox chkbox :checkboxes)
{
if(chkbox.isSelected())
{
actual = chkbox.getText() ; break;
}
}
虽然可能有一个JCheckbox组可以做你想要的。
Looks like you can use ButtonGroup并获取要迭代的元素。
答案 1 :(得分:2)
您可以创建一个包含所有复选框的数组,然后循环遍历数组...
JCheckBox[] boxes = new JCheckBox[] {chkDef1,chkDef2,chkDef3,chkDef4}
for (JCheckBox box : boxes) {
if (box.isSelected()) {
actual = box.getText();
break; // We don't want to loop unnecessarily
}
}
同样,你可以创建一个带有可变数量参数的简单方法......
public String getCheckedItem(JCheckBox... boxes) {
String actual = null;
for (JCheckBox box : boxes) {
if (box.isSelected()) {
actual = box.getText();
break; // We don't want to loop unnecessarily
}
}
return actual;
}
并称之为......
String actual = getCheckItem(chkDef1, chkDef2, chkDef3, chkDef4);
就个人而言,我会返回复选框,但这取决于你
如果您只想维护一个选中的复选框(即不允许选中多个复选框),那么您应该认真考虑使用JRadioButton
和ButtonGroup
。
否则你可以收集所有选中的复选框......
public JCheckBox[] getCheckedItem(JCheckBox... boxes) {
List<JCheckBox> selected = new ArrayList<JCheckBox>(boxes.length);
for (JCheckBox box : boxes) {
if (box.isSelected()) {
selected.add(box);
}
}
return selected.toArray(new JCheckBox[selected.size]);
}