Ben193
Ben193

Reputation: 45

Eclipse SWT Widget : Combining two Listeners

I'm working currently on updating a wizard page and I wish to disable a textField after the selection of a radioButton.

For example : if (radioButton[1].getSelection)
"then let's say textField[2].setEnabled(false)"

The question here is, how to connect both listeners of radioButton[i] and textField[i] together? Thanks.

 case composed:
            container.setLayout(new RowLayout());
            Button[] radioButton= new Button[answers.size()];
            for (int i = 0; i < answers.size(); i++) {
                String ans = answers.get(i).getValue();
                radioButton[i]=new Button(container, SWT.RADIO);
                radioButton[i].setText(ans);
                radioButton[i].addSelectionListener(new SelectionAdapter(){

                    @Override
                    public void widgetSelected(SelectionEvent arg0) {
                        // TODO Auto-generated method stub

                    }});
            }
            Text[] textField=new Text[answers.size()];
            for (int i = 0; i < answers.size(); i++) {
                textField[i]=new Text(container, SWT.SINGLE | SWT.BORDER);
                textField[i].addModifyListener(new ModifyListener(){

                    @Override
                    public void modifyText(ModifyEvent arg0) {
                        // TODO Auto-generated method stub

                    }

                });
            }

Upvotes: 1

Views: 263

Answers (1)

Adam Kotwasinski
Adam Kotwasinski

Reputation: 4564

Create radio buttons and text fields before adding listeners, so you can refer to both of them.

        Button[] radioButton = new Button[answers.size()];
        for (int i = 0; i < answers.size(); i++) {
            String ans = answers.get(i).getValue();
            radioButton[i] = new Button(container, SWT.RADIO);
            radioButton[i].setText(ans);
        }

        Text[] textField = new Text[answers.size()];
        for (int i = 0; i < answers.size(); i++) {
            textField[i] = new Text(container, SWT.SINGLE | SWT.BORDER);

            radioButton[i].addSelectionListener(new SelectionAdapter(){
                @Override
                public void widgetSelected(SelectionEvent arg0) {
                  textField[i].setEnabled(radioButton[i].getSelection());
                }});

            textField[i].addModifyListener(new ModifyListener(){
                @Override
                public void modifyText(ModifyEvent arg0) {
                  // your stuff
                }});
        }

You could also make both listeners to be the same listener object (but to be honest, why bother - it's better to have smaller listeners with single purpose):

private static class MyListener extends SelectionAdapter implements ModifyListener {
     public void widgetSelected(SelectionEvent arg) { ... }
     public void modifyText(ModifyEvent arg) { ... }
}

Upvotes: 3

Related Questions