MyDrawPanel“静态”矛盾

时间:2015-06-11 16:53:46

标签: java swing

编辑:MyDrawPanel是这样的:

class MyDrawPanel extends JPanel {
    public void paintComponent(Graphics g) {
        g.setColor(Color.RED);
        g.fillOval(d, e, 40, 40);
    }
}

我对这一小块代码感到沮丧。我正在尝试创建一个新的MyDrawPanel。代码:

class Simulation{
MyDrawPanel drawPanel = new MyDrawPanel();
public static void startSimulation() {
    frame.getContentPane().add(drawPanel); //drawPanel must be static
}
}

问题在于:Eclipse告诉我drawPanel必须是静态的。但是,每当我将其更改为静态时,Eclipse都会给出一个错误,基本上告诉我要摆脱静态。

我做过研究,这就是我发现的:https://stackoverflow.com/a/9560633/4778083 这个人告诉我,我应该让这个类静态,但每当我这样做时,Eclipse告诉我,“模拟类的非法修饰符;只允许使用public,abstract和amp。final。”

所以基本上,我被卡住了。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

首先,你谈到的答案是嵌套类,你的不是嵌套类。其次,如果您打算在startSimulation()中致电main(),则必须将Simulation的实例设为静态。您不能将整个类声明设为静态,而只能将类的实例设为静态。你应该真正阅读更多关于static的内容。

我的意思是:

public class SomeClass{
static Simulation s = new Simulation();
public static void main(String[] args){
s.startSimulation();
}
}

修改MyDrawPanelSimulation的实例也必须为static,因为您无法引用非静态变量静态背景。

"静态变量是一个静态分配的变量 - 其生命周期或范围在整个程序运行中延伸" - Wikipedia