【发布时间】:2014-06-25 15:21:22
【问题描述】:
在 Java 项目中,我使用 swt 小部件按钮作为复选框。 I have read the java docs 和我需要检查该框是否被选中的功能似乎是 Button.getSelection()。在我的实现中,无论我是否选择了该框,它似乎总是返回 true。
setChecks 在开始时调用,然后在按下按钮时调用 getFilter。 复选框按预期显示,我可以取消选择其中一些,但是当我按下按钮时,getFilter 中的打印行对每个按钮都返回 true。
void setChecks(String[] s){
button=new Button[s.length];
bool = new boolean[button.length];
for(int i=0;i<s.length;i++){
button[i] = new Button(shell, SWT.CHECK);
button[i].setSelection(true);
button[i].setBounds(449, 209+(20*i), 174, 16);
button[i].setText(s[i]);
//System.out.println(s[i]);
}
}
private boolean[] getFilter() {
bool = new boolean[button.length];
for (int i=0; i<bool.length;i++){
bool[i]=button[i].getSelection();
System.out.println(button[i].getSelection());
}
return bool;
}
编辑:
修改代码:
button[i].addSelectionListener(new SelectionListener(){
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
}
@Override
public void widgetSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
Button b = (Button)arg0.getSource();
b.setSelection(!b.getSelection());
}
});
【问题讨论】:
-
请注意:除非绝对必要,否则使用
setBounds()是不好的做法,请改用Layout。如果您还没有,请阅读:Understanding Layouts in SWT. -
这看起来不错,我以后可能会转换,GUI 对象不是我的强项,所以我目前正在使用生成边界的 eclipse gui 编辑器。在设计方面,我正在研究功能,我可能会在那时对其进行转换。