2012-07-03 8 views
5

Vorrei impostare l'opzione modificabile di una casella di testo in base alla selezione di un pulsante di opzione? Come codificare il listener di azioni sul pulsante di scelta?Listener di azioni su un pulsante di opzione

+0

Vedere le esercitazioni java: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html e http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener. html? – DNA

+1

Questa domanda è tipica di una mancanza di ricerca –

+2

'JCheckbox' sembra più a proposito. – trashgod

risposta

2

Prova questa:

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

Sarebbe bello mostrare come rileviamo quale pulsante radio è attivo nel gruppo di pulsanti. – mins

+0

Usa ItemListener invece di ActionListener per componenti ItemSelectable come il pulsante di opzione – Cybermonk

5

mio Java è un po 'arrugginito, ma questo dovrebbe essere quello che stai cercando.

Ecco il vostro ascoltatore:

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

E qui è il codice che imposta lo compongono.

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, giusto. Come ho detto, arrugginito a Java. – zalpha314

6

Questa è la soluzione che utilizzerei in questo caso.

//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

Un'altra risposta a questa domanda. Modifica un piccolo codice dalla risposta di zalpha314.

Si potrebbe sapere quale pulsante di opzione viene selezionato dal testo di questo pulsante e si può anche saperlo tramite Comando di azione. Nel codice demo del pulsante radio dell'oracolo http://docs.oracle.com/javase/tutorial/uiswing/examples/components/RadioButtonDemoProject/src/components/RadioButtonDemo.java, ho imparato a utilizzare il comando azione.

In primo luogo, definire due comando di azione

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

comando di azione Quindi aggiungere ai pulsanti

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

Quindi, in actionPerformed, si potrebbe ottenere il comando di azione.

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

comando Azione forse meglio quando il button.getText() è una stringa molto lunga.