在Java项目中,我使用swt widget按钮作为复选框。 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());
}
});
答案 0 :(得分:2)
您始终通过
将其设置为true
button[i].setSelection(true);
这就是为什么你总能得到真实的原因。进行选择后,您需要设置button
。你有一个听众附加它。你必须使用
void addSelectionListener(SelectionListener listener)
将侦听器添加到侦听器集合中,这些侦听器将在用户选择控件时通知,方法是向SelectionListener接口中定义一条消息。
请阅读SelectionListener上的文档。你必须使用
void widgetSelected(SelectionEvent e)
在控件中进行选择时发送。
void widgetDefaultSelected(SelectionEvent e)
在控件中发生默认选择时发送。
答案 1 :(得分:0)
这是我找到的解决方案,然后访问bool,而不是调用getFilters。
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);
bool[i]=true;
button[i].addSelectionListener(new SelectionListener(){
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
}
@Override
public void widgetSelected(SelectionEvent arg0) {
Button b = (Button)arg0.getSource();
for (int i=0;i<button.length;i++){
if (button[i].getText()==b.getText())bool[i]=!bool[i];
}
}
});
button[i].setBounds(449, 209+(20*i), 174, 16);
button[i].setText(s[i]);
}
}