【发布时间】:2014-11-25 15:21:05
【问题描述】:
所以我不确定我设置 Jframe 背景的问题出在哪里
frame.getContentPane().setBackground(Color.green);
但是,一旦程序启动,它会显示一抹绿色,然后就消失了。
Game.java
package com.questkings.game;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends JPanel{
Player player = new Player(this);
public Game(){
addKeyListener(new KeyListener(){
@Override
public void keyTyped(KeyEvent e){
}
@Override
public void keyReleased(KeyEvent e){
player.keyReleased(e);
}
@Override
public void keyPressed(KeyEvent e){
player.keyPressed(e);
}
});
setFocusable(true);
}
public void move(){
player.move();
}
@Override
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
player.paint(g2d);
}
public void timer1() throws InterruptedException{
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
}
};
new Timer(delay, taskPerformer).start();;
Thread.sleep(10);
}
public static void main(String args[]) throws InterruptedException, Exception{
int Width = 800;
int Height = 400;
Game game = new Game();
JFrame frame = new JFrame("quest Kings");
frame.setSize(Width, Height);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.green);
frame.add(game);
frame.setResizable(false);
//What to do after the program starts
while(true){
game.move();
game.repaint();
game.timer1();
}
}
}
【问题讨论】:
-
while(true){ .. }不要阻塞 EDT(事件调度线程)。发生这种情况时,GUI 将“冻结”。有关详细信息和修复,请参阅 Concurrency in Swing。 -
@AndrewThompson while(true) 不应阻塞 EDT,因为它是在主线程中调用的。
-
如果我只是在后台为我的尺寸写了一个新的 Rectangle 会有什么缺点?
-
您确实意识到您的
while(true)循环正在创建一个庞大的 Swing 计时器实例