一尘不染

我无法在主方法中调用repaint()方法

java

每当我尝试调用repaint()方法时,都会说不能从静态方法引用非静态方法。顺便说一句,它与paintComponent方法在同一类中。我尝试首先在类之外创建一个对象,然后使用对象名称引用它,但是它也没有用。请帮忙。

public class P extends JPanel {

P g = new P();
boolean change = true;
static int x = 0;
static int y = 0;
static Color CircleC = new Color(0, 0, 0);
static String position = "";
P p = new P();

public void paintComponent(Graphics g) {
    g.setColor(CircleC);
    g.fillOval(x, y, 50, 50);
    g.setColor(Color.WHITE);
    g.drawString(position, x, y + 25);

}



public static void main(String[] args) throws InterruptedException {
p.repaint();

}

}

阅读 267

收藏
2020-12-03

共1个答案

一尘不染

主要方法是静态的。您的p对象不是:它是P类的实例字段。试试这个:

public static void main(String[] args) throw InterruptedException {
    EventQueue.invokeLater( new Runnable() {
        public void run() {
            P p = new P();
            p.repaint();
        }
    } );
}

您应该始终从事件分发线程访问Swing组件,这就是为什么我将它们全部放在EventQueue invokeLater中的原因。

2020-12-03