2

我试图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);
    }

}
4

1 回答 1

5

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

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

其他问题及建议:

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

有用的 Java 教程:

于 2013-09-15T19:02:58.653 回答