头等舱
package com.mudd.render;
import java.awt.Dimension;
import javax.swing.JFrame;
import com.mudd.game.Game;
public class render {
int width = 500;
int height = 600;
Game g = new Game();
public void show(){
JFrame gameWindow = new JFrame("..");
gameWindow.setPreferredSize(new Dimension(width, height));
//gameWindow.setIconImage(new ImageIcon(imgURL).getImage());
gameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameWindow.pack();
gameWindow.add(g);
gameWindow.setVisible(true);
}
public static void main(String[] args) {
render game = new render();
game.show();
}
}
第二课
package com.mudd.game;
import java.awt.Graphics;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Game extends JPanel {
public void paint(Graphics g){
g.fillOval(10, 10, 500, 500);
System.out.println("Test");
}
}
是什么导致我的Test print语句被打印两次?如果我添加其他priintlns,它也会打印出来。我一直在使用Head First Java学习Java,而且我已经完成了其他小型命令行项目,但我发生过这样的事情。
答案 0 :(得分:2)
Swing图形是被动的 - 您不直接调用绘制方法,而是JVM调用它们。有时可能会在您的建议中调用它们,例如当您致电repaint()
时,但即使这也不是保证,有时可能会根据平台的建议调用它们,例如确定您的应用程序具有需要清理的“脏”像素。因此,您必须为此计划 - 绘制方法不应包含更改对象状态的代码,也不应包含业务逻辑代码。相反,它应该有绘画的代码,仅此而已。
有关详细信息,请参阅:
侧面建议:
@Override
注释进行任何方法覆盖