如何一次在两个不同的帧中显示Singleton类的面板?

Sri*_*iku 2 java swing

我试图在两个不同的Jframe上显示单例obj,但它只显示在最后添加对象的Jframe中(例如Frame2).其他Jframe是空的.此Singleton类继承自Panel,并在其中包含标签.任何人都可以告诉我如何在两个不同的框架中显示这个单例对象?

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() 
{
public void run() {
 NewJFrame inst = new NewJFrame();
 inst.setTitle("Frame1");
 inst.setSize(300, 300);
 inst.setLocationRelativeTo(null);
 inst.setVisible(true);
 singltonpanel _sin = singltonpanel.instance();
 inst.add(_sin);
 inst.repaint();
 JFrame frame = new JFrame("Frame2");
 frame.setSize(300, 300);
 frame.setVisible(true);
 singltonpanel _sin1 = singltonpanel.instance();
 frame.add(_sin1);
 frame.repaint();
}
});
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 7

Swing组件仅允许具有单个父组件.您可能无法将组件添加到两个容器中.

来自http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

每个GUI组件只能包含一次.如果组件已经在容器中并且您尝试将其添加到另一个容器,则该组件将从第一个容器中删除,然后添加到第二个容器中.

换句话说,Swing要求将组件排列在树层次结构中.

解决方案:您基本上需要将单例类拆分为模型类和视图类.(查看http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller上的MVC模式)然后实例化模型的多个视图.