[英]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.