2012-07-03 11 views
5

Chciałbym ustawić opcję edycji pola tekstowego na podstawie wyboru przycisku radiowego? Jak zakodować odbiornik akcji na przycisku radiowym?Odbiornik akcji na przycisku radiowym

+0

Zobacz samouczki java: http://docs.oracle.com/javase/tutorial/uiswing/components/button.html i http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener. html? – DNA

+1

To pytanie jest typowe z braku badań. –

+2

'JCheckbox' wydaje się być bardziej odpowiedni. – trashgod

Odpowiedz

2

Spróbuj tego:

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

Byłoby miło pokazać, jak możemy wykryć, który przycisk jest aktywny w grupie przycisków. – mins

+0

Użyj ItemListener zamiast ActionListener dla ItemSelectable komponenty takie jak przycisk radiowy – Cybermonk

5

My Java jest trochę zardzewiały, ale to powinno być to, czego szukasz.

Oto słuchacz:

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

A oto kod, który ustawia go w górę.

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

Nie 'ButtonGroup'? – trashgod

+0

Och, racja. Tak jak powiedziałem, zardzewiały w Javie. – zalpha314

6

Jest to rozwiązanie, którego użyłbym w tym przypadku.

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

Kolejna odpowiedź na to pytanie. Zmodyfikuj mały kod z odpowiedzi zalpha314.

Możesz wiedzieć, który przycisk radiowy jest zaznaczony przez tekst tego przycisku, a także możesz go znać za pomocą polecenia akcji. W radiowym guziku demo kodu demo http://docs.oracle.com/javase/tutorial/uiswing/examples/components/RadioButtonDemoProject/src/components/RadioButtonDemo.java nauczyłem się używać polecenia akcji.

Najpierw zdefiniuj dwa polecenia działanie

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

Następnie dodać polecenie do działania przycisków

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

Więc w actionPerformed, można dostać polecenie działania.

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

polecenie Akcja może lepiej gdy button.getText() jest bardzo długi ciąg.

Powiązane problemy