我没有获得两个类似的JFrame,而是获得了一个双重组件

时间:2014-11-25 19:48:08

标签: java swing jframe

我创建了一个带有按钮,标签和文本的JFrame,我想在执行主程序时显示两次,所以我确实喜欢这样:

import java.net.SocketException;

public class Main {

    public static void main(String[] args) throws SocketException {
        new MyFrame("client1");
        new MyFrame("client2"); 
    }
}

结果:我得到两个框架:一个框架内部另一个框架,一个框架为空。

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

您正在使用static个实例字段和MyFrame作为组件

组件只能驻留在单个容器中,当您创建第二个框架时,静态组件会在添加到第二个容器之前从第一个容器中删除。

解决方案,不要这样做,永远......

我假设您正在使用static,因为您想要从另一个类访问这些字段,在这种情况下,您应该在MyFrame类中使用适当的getter并将其引用传递给那些类需要它。

或者,您可以建立一系列监视变化并采取适当措施的观察者,这有助于解耦代码。

就个人而言,如果你需要以某种方式修改MyFrame实例,我会提供更新组件的setter方法,因为我不喜欢在没有充分理由的情况下公开UI元素,其他人适当地搞乱他们