Originariamente inviata da
cerza
[..]
In che modo useresti l'ItemListener, ci avevo provato prima dell'ActionListner ma non accadeva molto.
Inoltre nella stessa schermata ho anche delle checkBox, come potrei verificare se le varie checkbox vengono selezionate?
Puoi registrare su ogni radio button (funziona anche con i checkbox) un ItemListener, e all'interno del metodo (di cui devi fare l'ovveride) itemStateChanged (ItemEvent e) scegli cosa fare, in particolare puoi verificare se il componente è stato selezionato o meno in questo modo:
codice:
nomeDelTuoComponente.addItemListener (new ItemListener () {
@Override public void itemStateChanged (ItemEvent e) {
if (e.getStateChange () == ItemEvent.SELECTED)) {
// ...
}
else {
// ...
}
}
})
Per quanto riguarda il miglioramento del codice, non sapendo il design che hai scelto non è facile trovare subito la soluzione più adeguata, ma puoi prendere spunto da questo esempietto se vuoi:
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class RadioButtonTextField
{
public static void main (String [] a) {
SwingUtilities.invokeLater (new Runnable () {
@Override public void run () {
JFrame frame = new JFrame ("Radio Button Text Field");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setContentPane (new MainPanel ());
frame.pack ();
frame.setLocationRelativeTo (null);
frame.setVisible (true);
}
});
}
}
class MainPanel extends JPanel
{
private ButtonGroup buttonGroup;
public MainPanel () {
super (new GridLayout (3, 1, 0, 10));
buttonGroup = new ButtonGroup ();
add (createRadioButtonTextField ("Giorno"));
add (createRadioButtonTextField ("Ora"));
add (createRadioButtonTextField ("Minuto"));
setBorder (new EmptyBorder (50, 50, 50, 50));
}
private JPanel createRadioButtonTextField (String text) {
JRadioButton radioButton = new JRadioButton (text);
buttonGroup.add (radioButton);
JTextField textField = new JTextField (10);
textField.setEnabled (radioButton.isSelected ());
radioButton.addItemListener (new ItemListener () {
@Override public void itemStateChanged (ItemEvent e) {
textField.setEnabled (e.getStateChange () == ItemEvent.SELECTED);
}
});
JPanel panel = new JPanel (new BorderLayout (10, 0));
panel.add (radioButton, BorderLayout.WEST);
panel.add (textField, BorderLayout.CENTER);
return panel;
}
}
Immagino che tu avrai anche bisogno dei reference ai textfield in qualche punto per leggerne i valori, per quello parlavo di un oggetto (che qui non uso, creo tutto al volo nel metodo) che potrebbe inglobare il textfield, fornire un metodo per leggerne il testo (meglio rispetto ad avere un metodo che esponga direttamente il textfield a chiunque), etc., ma dipende appunto da quello che vuoi farci