将JFrame设为静态变量是不是很糟糕? (Java swing)

时间:2014-02-24 17:31:35

标签: java swing user-interface jframe jpanel

使JFrame静态编程是不是很糟糕?我之前将JFrame声明为静态变量的原因是因为我在其中实例化了JPanel,我需要在某些事件上向JFrame发送信息,我唯一能做的就是在我的静态声明JFrame main然后在JFrame中调用一个方法来调用我的JPanel中的方法。

4 个答案:

答案 0 :(得分:4)

使用静态本质上不是好的或坏的,只要你出于正当的理由使用它。

然而,听起来你出于错误的原因使用static关键字,使得在类之间传递信息变得“更容易”。这种方法的问题在于,它将在未来扩展您的程序变得更加困难:如果您想要包含静态变量的类的两个实例,会发生什么?您将不得不重写一堆代码,因此最好避免使用静态作为共享数据的“快捷方式”。

相反,将JFrame的实例传递给创建JPanel的类或方法。

答案 1 :(得分:3)

在一个较大的程序中,由于你所说的原因,你可能会遇到麻烦 - 无论是static - 本身还是它表明存在更大的设计缺陷(并暗示更多)存在严重问题)。对于一个简单的一次性,它并不理想,但听起来它可以为你完成工作,只要确保你在评论中记录你为什么这样做。

一般而言,有更合适的方法可以做到这一点,例如:正确使用事件监听器,继承等。

例如,如果您的JFrame创建了一个子JPanel,并且您需要从其他地方访问JPanel,请考虑在您的JFrame派生类中实现公开的方法相关功能,而不是试图从外部直接操纵JPanel

答案 2 :(得分:0)

您可以考虑在包含静态主

的类中采用以下范例
public class MyMainClass {
    private static MyMainClass me;

    public static void main(String[] args) {
        me = new MyMainClass();
        me.start(args);
    }
    private void start(String[] args) {
    ....

答案 3 :(得分:0)

  

我能做到的唯一方法就是在我的main中静态声明JFrame然后在JFrame中调用一个方法来调用我的JPanel中的方法

您可以轻松定义从JPanel派生的类,并添加一个变量来保存对JFrame的引用;然后你可以在面板类的事件处理程序方法中调用JFrame的方法(可能是你自己的自定义JFrame子类)。

JPanel.getParent()方法很可能返回JFrame,而是返回其contentPane等;不要浪费时间。