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

rom*_*n23 2 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Player.java:

public class Player {

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

}
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 5

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

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

其他问题和建议:

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

有用的Java教程: