Java图形错误:静态/非静态事故

时间:2014-04-06 02:00:08

标签: java swing graphics

所以,我正在开发一个插槽项目,因为我想熟悉java图形库。设置工作相当完美。然后,我尝试绘制一条线来测试图形,并得到错误:

engine.java:9: non-static method drawLine(int,int,int,int) cannot be referenced from a static context java.awt.Graphics.drawLine(1, 2, 11, 12); ^ 1 error

我接受了我的朋友的建议并创建了一个新的engine,并将其命名为e,然后我做了drawloop()而不是e.drawloop,但得到了相同的错误。

代码:

import java.awt.Graphics;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class engine{
    public void drawloop(){
        java.awt.Graphics.drawLine(1, 2, 11, 12);
    }
    public static void main(String[] args){
           SwingUtilities.invokeLater(new Runnable()
                {
                 public void run()
                 {
                    display();
                 }
                });
        engine e = new engine();
        e.drawloop();
    }
    public static void display(){
        JFrame window = new JFrame("Pinnacle Slots");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setPreferredSize(new Dimension(768, 512));
        window.pack();
        window.setLocationRelativeTo(null);
        window.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:0)

发生的是错误的#34;绘画"正在使用呼叫。通常,一个会覆盖内置的paint()或paintComponent()方法。

与您的代码一起使用的示例:

@Override
public void paint(Graphics g) { //This is where that instance of Graphics comes in
    super.paint(g); //necessary for the actual JFrame to paint itself
    g.drawLine(startX, startY, endX, endY); //and, very simply, draw the line
}

这将在运行时自动调用,但如果您想再次手动调用(或在其他位置绘制线条),请使用

repaint().

另外,一个好的做法是为您的JFrame设置contentPane。您可以使用自定义JPanel / JComponent,或者只使用

 setContentPane(getContentPane());
在display()方法中。

我希望这可以帮助你和其他任何人解决这个问题!