每当我尝试调用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();
}
}
答案 0 :(得分:3)
主要方法是静态的。您的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中的原因。
答案 1 :(得分:0)
你不能从main()调用它,因为你不能在静态方法(main())中调用非静态函数(repaint())或使用非静态变量。
而是使主类实现Runnable并使用线程:
Thread repaintThread = new Thread("some_name", this); // \
public void run(){ // |
while(true){ // >-Theese shall be in the main class
repaint(); // |
} // |
} // /
repaintThread.start(); //this shall be in main()