问题: Main.repaint() 对我不起作用。repaint() 不会在 Main 中调用我的绘制方法。我尝试在重绘之前调用 validate 但没有成功。Main 最初或在调整大小时完美绘制,但是当我在代码中调用 repaint() 时没有发生任何事情。
这是该程序到目前为止的外观链接
所以我试图为java中的游戏创建一个级别选择屏幕。我的游戏是 JApplet。我的结构如下:
我的 Main 类扩展了 JApplet 并包含 LevelScreen 类的对象
LevelScreen 有一个 Main 调用的绘制方法。
我试图避免使用 Swing,因为布局管理器给我的设计带来了麻烦。所以我试图制作一个更简单、更适合我需要的结构。
Main.java 中的paint()
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;
}
}
在我的按钮代码中,我尝试重新绘制 Main,因为我想在鼠标离开按钮时制作淡出动画。我的问题是我不能用 repaint() 在 main 中调用paint(Graphics g)
这里我调用 repaint():
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();
}