2012-07-03 4 views
5

Ich möchte editierbare Möglichkeit, ein Textfeld auf der Grundlage der Auswahl eines Radio-Button? Wie programmiere ich den Aktionslistener auf dem Radio Button?Aktion Listener auf einem Radiobutton

+0

Siehe Java Tutorials: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html und http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener. HTML? – DNA

+1

Diese Frage aus einem Mangel an Forschung typisch ist –

+2

'JCheckbox' scheint mehr apropos. – trashgod

Antwort

2

Try this:

JRadioButton myRadioButton = new JRadioButton(""); 
myRadioButton.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
     // Do something here... 
    } 
}); 
+0

Es wäre schön zu zeigen, wie wir erkennen, welcher Radiobutton in der Tastengruppe aktiv ist. – mins

+0

Verwenden ItemListener statt Action für ItemSelectable Komponenten wie Radiobutton – Cybermonk

5

Meine Java ein wenig rostig, aber dies sollte das sein, was Sie suchen.

Hier ist Ihre Zuhörer:

private RadioListener implements ActionListener{ 

    private JTextField textField; 

    public RadioListener(JTextField textField){ 
     this.textField = textField; 
    } 

    public void actionPerformed(ActionEvent e){ 
     JRadioButton button = (JRadioButton) e.getSource(); 

     // Set enabled based on button text (you can use whatever text you prefer) 
     if (button.getText().equals("Enable")){ 
      textField.setEditable(true); 
     }else{ 
      textField.setEditable(false); 
     } 
    } 
} 

Und hier ist der Code, der es einrichtet.

JRadioButton enableButton = new JRadioButton("Enable"); 
JRadioButton disableButton = new JRadioButton("Disable"); 

JTextField field = new JTextField(); 

RadioListener listener = new RadioListener(field); 

enableButton.addActionListener(listener); 
disableButton.addActionListener(listener); 
+1

No 'ButtonGroup'? – trashgod

+0

Oh, richtig. Wie ich schon sagte, rostig bei Java. – zalpha314

6

Dies ist die Lösung, die ich in diesem Fall verwenden würde.

//The text field 
    JTextField textField = new JTextField(); 

    //The buttons 
    JRadioButton rdbtnAllowEdit = new JRadioButton(); 
    JRadioButton rdbtnDisallowEdit = new JRadioButton(); 

    //The Group, make sure only one button is selected at a time in the group 
    ButtonGroup editableGroup = new ButtonGroup(); 
    editableGroup.add(rdbtnAllowEdit); 
    editableGroup.add(rdbtnDisallowEdit); 

    //add allow listener 
    rdbtnAllowEdit.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      textField.setEditable(true); 

     } 
    }); 

    //add disallow listener 
    rdbtnDisallowEdit.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      textField.setEditable(false); 

     } 
    }); 
0

Eine andere Antwort auf diese Frage. Ändern Sie einen kleinen Code aus der Antwort von zalpha314.

könnten Sie wissen, welche Radiobutton durch den Text dieser Schaltfläche ausgewählt ist, und man konnte wissen, dass es auch von Aktion Befehl. In der Optionsschaltfläche des Orakels Demo-Code http://docs.oracle.com/javase/tutorial/uiswing/examples/components/RadioButtonDemoProject/src/components/RadioButtonDemo.java, lernte ich, wie man Aktion Befehl verwendet.

Zunächst definieren zwei Aktionsbefehl

final static String ON = "on" 
final static String OFF = "off" 

Dann

JRadioButton enableButton = new JRadioButton("Enable"); 
enableButton.setActionCommand(ON); 
JRadioButton disableButton = new JRadioButton("Disable"); 
disableButton.setActionCommand(OFF); 

So in actionPerformed zu Tasten Aktion Befehl hinzufügen, können Sie den Aktionsbefehl erhalten.

public void actionPerformed(ActionEvent e){ 
    String ac = e.getActionCommand(); 
    if (ac.equals(ON)){ 
     textField.setEditable(true); 
    }else{ 
     textField.setEditable(false); 
    } 
} 

Aktion Befehl vielleicht besser, wenn die button.getText() ist eine sehr lange Zeichenfolge.