Java 将类型对象转换为类型JButton?
大家好,我有一个问题,我有一个object Class类型的对象,我想把它转换成java.swing.JButton类型的对象,有什么办法吗? 代码如下:Java 将类型对象转换为类型JButton?,java,swing,jbutton,Java,Swing,Jbutton,大家好,我有一个问题,我有一个object Class类型的对象,我想把它转换成java.swing.JButton类型的对象,有什么办法吗? 代码如下: private void EventSelectedFromList(java.awt.event.ActionEvent evt) { // add code here try { Strin
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);
}
}
有什么想法吗?
谢谢您可能只想进行一次强制转换(可能需要先检查实例,如Andreas所示;这取决于如果您找到的对象不是JButton
,您希望发生什么):
但这里还有更多的细节。您应该区分对象的类型和变量的类型
在您的例子中,ob
本身的类型肯定是Object
。但是,ob
的值可能是对JButton
实例的引用,在这种情况下,您可以进行强制转换,如上所述
请注意,这根本不会更改对象的类型。一旦创建了对象,它将永远不会更改其类型。您所做的只是声明一个类型为JButton
的新变量,并要求JVM检查ob
的值是否真的引用了JButton
的实例(或子类;或者它是空引用)。如果是这种情况,按钮
的值最终将与ob
的值相同(即对同一对象的引用)。如果不是,将抛出一个ClassCastException
你明白我说的变量类型和它引用的对象类型之间的区别吗?理解这种差异非常重要。将类实例转换为JButton实例(也称为casting)是不可能的,也不是正确的方法。但是您可以使用Class对象创建JButton的新实例:
Class<JButton> buttonClass = JButton.class;
JButton button = buttonClass.newInstance();
FindObject()方法做什么?确切地说,hashmap中存储了哪些对象?FindObject()检查combobox中选定的对象名称与hashmap中的对象类型是否返回JButton或组件类型?他没有尝试转换类的实例
-他已经获得了对JButton
的引用,仅在类型为Object
的变量中。我相信代码的Class
部分只是为了说明ob
所指对象的类型。我被“object Class”一词和“zzz”变量的存在误导了。。。以英语为母语的人在解码问题方面有一点优势;-)我认为他已经知道如何使用cast,就像他以前在代码中使用cast一样。问题是关于将zzz转换成JButton。(但我可能错了)@Colin:我不这么认为,因为有这样的评论://现在是JButton类型的'ob',我想在这个JButton中添加ActionListener???
嗯,你是对的。但是当你在上面两行投完一个球后,问怎么投真的很奇怪。
Class<JButton> buttonClass = JButton.class;
JButton button = buttonClass.newInstance();
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
});