我在swing组件上有一个鼠标事件,该事件可以是2个不同的自定义类:ModelTable和Modelcompte是使用netbeans swing gui创建的swing组件,它们都扩展了JPanel。它们共享一些方法和属性。
Component source = (Component) evt.getSource();
Component panel = (Component) (source.getParent()
.getParent()
.getParent()
.getParent()
.getParent());
Class clazz = panel.getClass();
clazz.cast(panel);
当我打印面板的类时,它给了我正确的类,但是当我尝试在面板上使用该类的方法时,它找不到该方法(“方法...在组件类中不存在”) 。似乎面板仍然是Class Component ...
我想做的是:
if (panel instance of ModelTable){
panel.setQuantity(1);
}
else if (panel instance of ModelCompte){
panel.setQuantity(2)
}
感谢您的帮助!
// and by the way I don't know why I can't directly do this :
(Component) panel = (Component) (evt.getsource()
.getParent()
.getParent()
.getParent()
.getParent()
.getParent());
答案 0 :(得分:4)
似乎面板仍然是类组件...
是的。您正在执行转换,但不执行任何操作。不会更改ListView
变量的编译时类型。
如果您知道要调用的方法,则大概至少知道它声明的 some 类型-因此请使用常规的非反射代码将其强制转换为该类型:
panel
如果在多个类中声明了相同的方法,则可以为该方法提供一个通用的超类,或者使它们实现一个声明该方法的接口。然后,您将转换为超类或接口,此时可以调用该方法。 (在问题中没有具体示例的情况下,很难在答案中更具体。)