AWT Source eines ItemEvents

Leifa

Mitglied
Moin!

Ich habe einen ItemListener, der mehrere Objekte vom Typ Choice überwacht. Wenn nun ein ItemEvent
Code:
e
kommt, möchte ich zunächst herausfinden, welches Choice-Objekt verändert wurde.
Mit
Code:
if (((Choice) e.getItemSelectable()).equals(ch_case))
funktioniert es leider nicht.
Kann mir da jemand weiter helfen? Ich möchte aus dem ItemEvent heraus einfach eine Referenz auf das Choice-Objekt bekommen, welches verändert wurde.

Gruß
Leif
 
Das hatte ich auch zuerst probiert:
Code:
if (((Choice) e.getItem()).equals(ch_case))
Aber das Ergebnis ist Folgendes:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.awt.Choice
 
Dann ist da was in deinem Code komisch:

Beispiel fix in Netbeans zusammengeklickt:

Java:
import javax.swing.JRadioButton;

public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jRadioButton1 = new javax.swing.JRadioButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jRadioButton1.setText("jRadioButton1");
        jRadioButton1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jRadioButton1ItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jRadioButton1)
                .addContainerGap(37, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jRadioButton1)
                .addContainerGap(38, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jRadioButton1ItemStateChanged(java.awt.event.ItemEvent evt) {
       System.out.println(evt.getItem().getClass());
       System.out.println(evt.getSource().getClass());
       System.out.println(((JRadioButton) evt.getItem()).getActionCommand());
    }

Ausgabe:
Code:
run:
class javax.swing.JRadioButton
class javax.swing.JRadioButton
jRadioButton1
 
Ok, hier mal etwas mehr Code:
Code:
public class Fenster extends Frame implements ItemListener {

Choice ch_case;

public Fenster() {
    ...
    Choice ch_case = new Choice();
    ch_case.addItemListener(this);
    ...
}

public void itemStateChanged(ItemEvent e) {
    if (((Choice) e.getSource()) == ch_case) {...}
}
Ich beschäftige mich zum ersten Mal mit dem ItemListener. Habe ich die Funktionsweise vielleicht falsch verstanden?
 
Warum nimmst Du nicht Swing statt AWT und JComboBox statt Choice.
Das Event auslösende Objekt bekommt man immer über die getSource() des selben. Im Fall von Choice, JComboBox... bekommt man per getItem() immer das Element, welches selektiert bzw. deselektiert wurde (s. API Doku)
In Deinem Choice stecken Strings, die Du versuchst in ein Choice Objekt zu casten, daher die Exception.
 

Neue Themen


Zurück
Oben