大家好我有问题,我有一个Object类型的对象,我想将它转换为java.swing.JButton类型的对象有没有办法做到这一点? 这是代码:
private void EventSelectedFromList(java.awt.event.ActionEvent evt) {
// add code here
try
{
String eventName = (String)EventList.getSelectedItem();// get the event
EventSetDescriptor ed = eventValue(events,eventName);
if(ed.getListenerType() == ActionListener.class){// check if selected event has an actionListerner listener
AddEventHandlerButton.setEnabled(true);// Enable eventhandler button
String objectName = (String) ObjectList.getSelectedItem();
Object ob = FindObject(hm, objectName);// retrieve the object from hashmap
// now 'ob' of type of JButton, I want to add ActionListener to this JButton???
Class zzz = ob.getClass();
System.out.println(zzz);
} else {
AddEventHandlerButton.setEnabled(false);
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null,
"Error",
"Inane error",
JOptionPane.ERROR_MESSAGE);
}
}
任何想法? 感谢
答案 0 :(得分:4)
你可能只想要一个演员(可能首先进行instanceof
检查,如Andreas所示;这取决于你找到的对象不是你想要发生什么JButton
):
JButton button = (JButton) ob;
但是有更多细节可以进入这里。您应该区分对象的类型和变量的类型。
在您的情况下,ob
本身的类型绝对是Object
。但是,ob
的值可能是JButton
实例的引用 - 在这种情况下,您可以投票,如上所述。
请注意,这根本不会更改对象的类型。一旦创建了一个对象,它就永远不会改变它的类型。您所做的只是声明一个JButton
类型的新变量,并要求JVM检查ob
确实的值是否引用{{1}的实例}(或子类;或者它是一个空引用)。如果是这种情况,JButton
的值将最终与button
的值相同(即对同一对象的引用)。如果不是,则会抛出ob
。
你是否明白我对变量类型与它碰巧引用的对象类型之间的区别有什么意义?理解这种差异非常重要。
答案 1 :(得分:2)
将Class实例转换为JButton实例(也就是转换)是不可能的,不是正确的方法。但是您使用Class对象来创建JButton的 new 实例:
Class<JButton> buttonClass = JButton.class;
JButton button = buttonClass.newInstance();
但看起来你希望通过findObject获得一个按钮,并希望为现有按钮添加一个监听器,我建议这样做:
Object ob = findObject(hm, objectName);
if (!(ob instanceof JButton)) {
// handle error and return/throw exception
}
JButton button = (JButton) ob;
button.addActionListener(new ActionListener(){
// implement methods
});