문제점 : Main.repaint()가 작동하지 않습니다. repaint()는 Main에서 내 페인트 메소드를 호출하지 않습니다. 필자는 다시 칠하기 전에 validate를 호출 해 보았지만 성공하지는 못했습니다. 주 그림은 처음부터 완벽하게 크기가 조정되었지만 코드에서 repaint()을 호출하면 아무 것도 일어나지 않습니다. 여기JApplet repaint()가 작동하지 않습니다.
프로그램이 지금까지 link
그래서 자바 게임을 레벨 선택 화면을 만들려고 메신저 모습입니다. 내 게임은 JApplet입니다. 나는 다음과 같은 구조를 가지고 : JApplet에를 확장하고
LevelScreen 홈페이지가 호출하는 페인트 방법이있다 LevelScreen 클래스의 객체를 포함
내 주요 클래스입니다.
레이아웃 관리자가 디자인에 문제가있어서 스윙을 사용하지 않으려 고했습니다. 그래서 나는 더 간단하고 내 필요에 더 적합한 구조를 만들려고 노력했습니다.
페인트() 내 버튼의 코드에서
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.java
에서 나는 마우스 버튼을 떠날 때 애니메이션 페이드를 만들고 싶어하기 때문에 홈페이지 칠하려고합니다. 이것은 당신이 싱글 디자인을 구현하는 방식에 문제가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