将类型对象转换为类型JButton?

HAM*_*MID 0 java swing jbutton

嗨,我有一个问题,我有一个对象类型为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);
        }

    }                   
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

Jon*_*eet 5

可能只需要强制转换(可能instanceof首先要进行检查,如Andreas所示;如果找到的对象不是,则取决于要发生的事情JButton):

JButton button = (JButton) ob;
Run Code Online (Sandbox Code Playgroud)

但这里有更多细节。您应该区分对象的类型和变量的类型。

在您的情况下,ob本身的类型肯定是Object。但是,值ob可能是对JButton- 的实例的引用,在这种情况下,您可以如上所述进行转换。

请注意,这根本不会改变对象的类型。创建对象后,它将永远不会更改其类型。所有你正在做的是声明类型的新变量JButton,并要求JVM检查的价值ob真的参考的实例JButton(或子类;或者说,它是一个空引用)。在这种情况下,的值button最终将与的值相同ob(即对同一对象的引用)。如果不是,ClassCastException将抛出a。

您是否了解变量类型与碰巧要引用的对象类型之间的区别的含义?了解这种差异非常重要。