在我的actionPerformed
方法中,我有以下两行代码,
JButton pressed =(JButton)e.getSource();
JMenuItem pressedSave = (JMenuItem)e.getSource();
为什么不允许这样做?我得到以下编译器错误
线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:javax.swing.JButton无法强制转换为javax.swing.JMenuItem
我需要能够获得JButton
和JMenuItem
的文字。我怎么能这样做?
答案 0 :(得分:1)
错误很明显。您正尝试将Jbutton
分配给JMenuItem
。
您在第2行上收到错误,这意味着第1行是完美的,这也意味着e.getSource()
是JButton
,而不是JMenuItem
。
您可以使用instanceof
运算符来确定触发事件的组件:
Object comp = e.getSource();
if(comp instanceof JButton) {
// A JButton triggered the event
JButton pressed =(JButton) comp;
// Do something with your 'pressed' button
}
else if(comp instanceof JMenuItem) {
// A JMenuItem triggered the event
JMenuItem pressedSave = (JMenuItem) comp;
// Do something with your 'pressedSave' menu item
}
答案 1 :(得分:1)
您没有收到编译错误。
“允许”,它只是不起作用。
如果不允许,则编译器会抱怨。
但是你在这里得到的是一个RuntimeException,因为你有一个JButton
,它根本无法转换为JMenuItem
。它们是不相关的类型 - 这两者之间的转换/转换应该如何?
所能做的是将JButton
和JMenuItem
这两种类型投射到其常用超类型AbstractButton
。
答案 2 :(得分:1)
JMenuItem不是JButton的子类,但是你可以将它们都转换为AbstractButton。这可能会取决于你想做什么