从另一个类调用paint()方法?

时间:2013-09-15 18:57:24

标签: java swing paint

我试图从另一个类调用paint()方法,但它不起作用。

以下是代码:

Main.java

public class Main extends JFrame {
    private static final long serialVersionUID = 1L;

    private int WIDTH = 600;
    private int HEIGHT = 400;
    private String NAME = "Dark Ages";
    private String VERSION = "0.0.1 Pre-Alpha";
    static boolean running = false;

    private Image dbImage;
    private Graphics dbg;

    public Main() {
        //Initialize window
        JFrame frame = new JFrame();
        frame.setTitle(NAME + " - " + VERSION);
        frame.setSize(WIDTH, HEIGHT);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        //Running
        running = true;
    }

    public void paint(Graphics g) {
        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);
    }

    public void paintComponent(Graphics g) {
        // Draw Images
        repaint();
    }

    public static void main(String args[]) {
        new Main();
        Player player = new Player();
    }
}

Player.java

public class Player {

    public void paint(Graphics g) {
        g.drawRect(100, 100, 100, 100);
    }

}

1 个答案:

答案 0 :(得分:5)

  

如何从java中的另一个类调用paint()方法?

简而言之,您。事实上,你不应该直接从同一个类中调用它。相反,您应该更改类的状态(更改其字段),然后在其上调用repaint(),这将向JVM建议应该绘制组件。

其他问题和建议:

  • 我在你的代码中立即看到的一个明显问题是你的类有一个Graphics字段,这样做很危险。我建议你摆脱那个领域,这样你就不会想要使用它了。
  • 不要直接在JFrameJDialog或其他顶级窗口中绘制。这些窗口有太多的角色可以在幕后玩,你真的不想弄乱他们如何渲染自己或他们的孩子(除非你真的知道你在做什么并且有明确的需要)。
  • 最好使用paintComponent(...)方法覆盖JPanel或其他JComponent
  • paintComponent(...)覆盖中,不要忘记调用super的方法:super.paintComponent(g);。这将允许Swing在您进行绘图之前进行清洁绘图,例如删除旧的过时或删除的图像。
  • 跑步,不要走到最近的Swing绘画教程。
  • 您当前的Player类没有扩展Swing组件,并且没有添加到顶级窗口,所以它的代码没有任何用处。再次阅读教程。
  • 切勿在{{1​​}}或repaint()内致电paint(...)
  • paintComponent(...):请不要让我们为您创建代码,因为这是您的工作。请理解,您创建的代码越多,编码器就越好,因此,我们大多数人都不认为我们应该欺骗您创建自己的代码。

有用的Java教程: