复选框始终返回true .getSelection();

时间:2014-05-08 09:49:45

标签: java eclipse checkbox swt

在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());
            }
        });

2 个答案:

答案 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]);
    }
}