有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

    }                   

有什么想法吗? 谢谢


共 (2) 个答案

  1. # 1 楼答案

    可能只是想要一个强制转换(可能先进行instanceof检查,如Andreas所示;这取决于您所找到的对象不是JButton时希望发生什么):

    JButton button = (JButton) ob;
    

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

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

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

    你明白我说的变量类型和它引用的对象类型之间的区别吗?理解这种差异非常重要

  2. # 2 楼答案

    将类实例转换为JButton实例(也称为casting)是不可能的,这不是正确的方法。但是您可以使用Class对象创建JButton的实例:

     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
    });