我试图从另一个类调用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);
}
}
答案 0 :(得分:5)
如何从java中的另一个类调用paint()方法?
简而言之,您不。事实上,你不应该直接从同一个类中调用它。相反,您应该更改类的状态(更改其字段),然后在其上调用repaint()
,这将向JVM建议应该绘制组件。
其他问题和建议:
JFrame
,JDialog
或其他顶级窗口中绘制。这些窗口有太多的角色可以在幕后玩,你真的不想弄乱他们如何渲染自己或他们的孩子(除非你真的知道你在做什么并且有明确的需要)。paintComponent(...)
方法覆盖JPanel
或其他JComponent
。paintComponent(...)
覆盖中,不要忘记调用super
的方法:super.paintComponent(g);
。这将允许Swing在您进行绘图之前进行清洁绘图,例如删除旧的过时或删除的图像。Player
类没有扩展Swing组件,并且没有添加到顶级窗口,所以它的代码没有任何用处。再次阅读教程。repaint()
内致电paint(...)
。paintComponent(...)
:请不要让我们为您创建代码,因为这是您的工作。请理解,您创建的代码越多,编码器就越好,因此,我们大多数人都不认为我们应该欺骗您创建自己的代码。 有用的Java教程: