我想做一个代码,使一个正方形从面板的左侧移动到面板的右侧…我意识到,你可以简单地在代码块上显示一张图片,然后在下一块代码中,让图片被一个与背景颜色完全相同的正方形重叠……要做到这一点,我需要一个计时器,使它的代码,使图像出现,然后1秒后,它被重叠,然后新的图像出现在它旁边
意识到sleep.thread在gui上不能很好地工作,我求助于Javax.Swing.Timer
我现在只想让一个框出现在它的旁边
然而,我没有使用它的经验,需要一些帮助让它与我的代码-Andrew一起工作
{
g.setColor(Color.GREEN);
g.fillRect(50, 100, 100, 100); //first box on a red background
//Timer goes here
g.setColor(Color.RED);
g.fillRect(50, 100, 100, 100);//overlapps the first box
g.setColor(Color.GREEN);
g.fillRect(50, 110, 100, 100);//sets a new box right beside it
}
}发布于 2012-12-14 02:06:47
实际上,创建一个javax.swing.Timer非常简单。您自己不必担心线程,因为调度是在后台线程中自动进行的,但是您实现的侦听器的代码是在GUI线程中执行的。因此,您可以使用侦听器主体中需要的任何swing组件。
int interval = 1000; // repeating every 1000 ms
new Timer(interval, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// do whatever painting that you want
}
}).start();发布于 2012-12-14 01:33:46
您可以使用以下命令对其进行初始化:
Timer <timernamegoeshere> = new Timer(<delayinmilis>,<actionlistener>);因此,您输入计时器构造的每毫秒数都将执行一个操作。
这意味着您可以简单地将更新代码放到actionPerformed中,并让一个变量按您移动正方形的像素量递增,以及一个布尔值,从true切换到false,true表示绘制它,false表示将它设置为背景颜色。
发布于 2012-12-14 01:43:17
我不确定这是不是最好的方法,但是你可以很容易地重新定义一个正方形来定位。反过来,您可以让计时器更新square实例的位置,然后调用repaint()。这意味着paint方法只在新的位置绘制背景和相同的方块,而不是每次都创建一个新的方块。
然后,您的paint方法可以具有类似以下内容:
g.drawRect(referenceToSquare.getLocation().getX(), referenceToSquare.getLocation().getY(), 100, 100)您可以使用以下命令初始化计时器:
Timer timer = new Timer(delayInMillis);
timer.add(new ActionListener());然后在同一个班上有一个..。
actionPerformed(ActionEvent e) {
if(e.getSource() == timer) {
referenceToSquare.getLocation().getX()++;
}
frame.repaint();
}http://docs.oracle.com/javase/6/docs/api/java/awt/event/ActionListener.html
https://stackoverflow.com/questions/13864385
复制相似问题