容器类所有者的子对象必须将组件添加到其父容器的问题中

时间:2009-11-06 22:40:49

标签: java swing applet containers

我在处理JApplet中的容器和组件时遇到问题。 我没有放我的代码,因为我觉得没有必要。

主类拥有getContentPane()。

另一个类(我们称之为class1)拥有一个JLayeredPane()和添加到它的组件。

另一个类(我们称之为class2)只有要显示的组件。

在init()中,主类添加了class1的JLayeredPane()。

稍后,class1将其组件添加到其JLayeredPane(),并从class2创建一个新对象。

Class2应该生成可变数量的组件(组件数量及其属性随时间变化),但不能将它们添加到class1的JLayeredPane()。

如何展示class2组件?

感谢阅读。

2 个答案:

答案 0 :(得分:2)

Three ways
1. Pass JLayeredPane() to the class2's constructor or a method
2. Class2 has methods that return the components that Class1 can
   add to JLayeredPane()
3. Pass Class1's object to class2 which will call Class1's method through
   a known interface that Class1 implements (a callback)

答案 1 :(得分:1)

你可以:

将class1的引用提供给class2

....In Class1 code
Class2 two = new Class2();
two.setClass1Ref( this );

每次two添加新组件时,都会将其设置为one

... in Class2 code 


 Class1 one ...

 JComponent newComponent = .... 

 one.add( newComponent ); // onw.add delegates to its own JLayaredPane 

如果您不想在Class1中引用Class2,那么您可以在ContainerListener上添加回调方法