每当我尝试调用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(); } }
主要方法是静态的。您的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中的原因。