2012-07-03 21 views
5

Me gustaría establecer la opción editable de un cuadro de texto basado en la selección de un botón de opción? ¿Cómo codificar el oyente de acción en el botón de radio?Oyente de acción con un botón de radio

+0

Consulte los tutoriales de Java: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html y http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener. html? – DNA

+1

Esta pregunta es típica por la falta de investigación. –

+2

'JCheckbox' parece más apropiado. – trashgod

Respuesta

2

Prueba esto:

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

Sería bueno mostrar cómo detectamos qué botón de opción está activo en el grupo de botones. – mins

+0

Use ItemListener en lugar de ActionListener para componentes ItemSelectable como el botón de opción – Cybermonk

5

Mi Java es un poco oxidado, pero esto debe ser lo que estás buscando.

Aquí es su oyente:

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

Y aquí es el código que lo configura.

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 hay 'ButtonGroup'? – trashgod

+0

Oh, correcto. Como dije, oxidado en Java. – zalpha314

6

Esta es la solución que usaría en este 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

Otra respuesta para esta pregunta. Modifique un pequeño código de la respuesta de zalpha314.

Puede saber qué botón de selección se selecciona con el texto de este botón, y también lo puede conocer mediante Comando de acción. En el código de demostración del botón de radio del oracle http://docs.oracle.com/javase/tutorial/uiswing/examples/components/RadioButtonDemoProject/src/components/RadioButtonDemo.java, aprendí cómo usar el comando de acción.

En primer lugar, definir dos comando de acción

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

A continuación, agregue la acción de comandos a los botones

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

Así que en actionPerformed, se puede obtener el comando de acción.

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

comando de acción tal vez mejor cuando el button.getText() es una cadena muy larga.