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