Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将类型对象转换为类型JButton?_Java_Swing_Jbutton - Fatal编程技术网

Java 将类型对象转换为类型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

大家好,我有一个问题,我有一个object Class类型的对象,我想把它转换成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);
        }

    }                   
有什么想法吗? 谢谢

您可能只想进行一次强制转换(可能需要先检查
实例,如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
});