0

おはようございます。JComboBoxとJButtonの両方に同じアクションリスナーを追加しようとしましたが、実行時に次のようにClassCastException発生し、次java.lang.ClassCastException: javax.swing.JComboBox cannot be cast to javax.swing.JButtonのように両方にリスナーを追加しました。

jComboBox1.addActionListener(this);
jButton1.addActionListener(this);

actionPerformedメソッドは次のとおりです。

public void actionPerformed(ActionEvent e){

    JButton button=(JButton)e.getSource();
    JComboBox sCombo=(JComboBox)e.getSource();

    if(sCombo.equals(jComboBox1))
        listModel.addElement(sCombo.getSelectedItem());
    else
        listModel2.addElement(sCombo.getSelectedItem());

    if(button.equals(jButton1))
        System.out.println("Button1 is pressed");
}
4

2 に答える 2

3

実際に を実装していると仮定するとActionListener、ここで使用できます。instanceof

Object sourceObject = e.getSource();
if (sourceObject instanceof JButton) {
   JButton button=(JButton)sourceObject;
   ...
} else if (sourceObject instanceof JComboBox) {
   JComboBox comboBox = (JComboBox)sourceObject;
   ...
}

ただし、特にここでは、各コントロールが実行するタスクが非常に異なるため、各コントロールに個別のリスナーを割り当てることをお勧めします。

于 2013-01-01T01:41:33.293 に答える
2

それは合法ですが、これを行います

public void actionPerformed(ActionEvent e) {
    if(e.getSource() instanceof JButton) {
        JButton button=(JButton)e.getSource();
        System.out.println("Button1 is pressed");
    } else if(e.getSource() instanceof JComboBox) {
        /* watever you doing with combobox */
    }
}
于 2013-01-01T01:42:04.797 に答える