簡體   English   中英

向JComboBox和JButton添加相同的動作偵聽器是否合法

[英]Is it legal to add the same action listener to a JComboBox and JButton

早上好,我試圖為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");
}

假設您實際上是在實現ActionListener ,則可以在此處使用instanceof

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

但最好為每個控件分配一個單獨的偵聽器,尤其是在給定每個控件執行的任務截然不同的情況下。

這是合法的,但是這樣做

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM