问题: Main.repaint()不适用于我。 repaint()不会在Main中调用我的paint方法。我已经尝试在重绘之前调用验证,但没有成功。主要涂料完全初始或当调整大小,但是当我在我的代码中调用repaint()时,什么都没有发生。JApplet repaint()不起作用
这里是程序的外观如何,到目前为止link
所以我试着去创造一个选择屏幕在Java游戏。我的游戏是一个JApplet。我具有这样的结构,如下所示:
我的延伸JApplet的并含有 LevelScreen类的一个对象
LevelScreen具有主调用paint方法主要类。
我试图避免使用Swing,因为布局管理器给我设计带来麻烦。所以我试图制造出更简单,更符合我需要的结构。
paint()方法在Main.java
public class Main extends JApplet {
public static final int WIDTH = 700, HEIGHT = 500;
private static Main instance;
private LevelScreen levelScreen = new LevelScreen();
private View view = View.LEVELSCREEN;
public static Main getInstance() {
if (instance == null)
instance = new Main();
return instance;
}
@Override
public void init() {
setSize(WIDTH, HEIGHT);
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
if (view == View.LEVELSCREEN) {
levelScreen.mouseMoved(p);
}
}
});
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if (view == View.LEVELSCREEN)
levelScreen.paint(g2);
}
public enum View {
GAME, LEVELSCREEN;
}
}
在我的按钮的代码,我尝试重绘主要是因为我想打一个淡出动画当鼠标离开按钮。我的问题是,我不能调用漆(图形克),主要与重绘()
在这里,我呼吁重绘():
public void mouseExited() {
//start new thread to make fade out animation when mouse leave
mouseOver = false;
TimerTask task = new TimerTask() {
@Override
public void run() {
while (!mouseOver && opacity > 0.6) {
opacity -= 0.02;
//set level to 999 so i can see if the game repaints()
level = 999;
Main.getInstance().repaint(); //this doesnt work!!
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
new Thread(task).start();
}
工作完美!我误解了JApplet是如何由浏览器创建的,而不是程序。 – Bjorn