首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有图形用户界面的Javax.swing.timer (Eclipse)

带有图形用户界面的Javax.swing.timer (Eclipse)
EN

Stack Overflow用户
提问于 2012-12-14 00:39:21
回答 4查看 1.2K关注 0票数 3

我想做一个代码,使一个正方形从面板的左侧移动到面板的右侧…我意识到,你可以简单地在代码块上显示一张图片,然后在下一块代码中,让图片被一个与背景颜色完全相同的正方形重叠……要做到这一点,我需要一个计时器,使它的代码,使图像出现,然后1秒后,它被重叠,然后新的图像出现在它旁边

意识到sleep.thread在gui上不能很好地工作,我求助于Javax.Swing.Timer

我现在只想让一个框出现在它的旁边

然而,我没有使用它的经验,需要一些帮助让它与我的代码-Andrew一起工作

代码语言:javascript
复制
    {

          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

    }

}
EN

回答 4

Stack Overflow用户

发布于 2012-12-14 02:06:47

实际上,创建一个javax.swing.Timer非常简单。您自己不必担心线程,因为调度是在后台线程中自动进行的,但是您实现的侦听器的代码是在GUI线程中执行的。因此,您可以使用侦听器主体中需要的任何swing组件。

代码语言:javascript
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2012-12-14 01:33:46

您可以使用以下命令对其进行初始化:

代码语言:javascript
复制
Timer <timernamegoeshere> = new Timer(<delayinmilis>,<actionlistener>);

因此,您输入计时器构造的每毫秒数都将执行一个操作。

这意味着您可以简单地将更新代码放到actionPerformed中,并让一个变量按您移动正方形的像素量递增,以及一个布尔值,从true切换到falsetrue表示绘制它,false表示将它设置为背景颜色。

票数 1
EN

Stack Overflow用户

发布于 2012-12-14 01:43:17

我不确定这是不是最好的方法,但是你可以很容易地重新定义一个正方形来定位。反过来,您可以让计时器更新square实例的位置,然后调用repaint()。这意味着paint方法只在新的位置绘制背景和相同的方块,而不是每次都创建一个新的方块。

然后,您的paint方法可以具有类似以下内容:

代码语言:javascript
复制
g.drawRect(referenceToSquare.getLocation().getX(), referenceToSquare.getLocation().getY(), 100, 100)

您可以使用以下命令初始化计时器:

代码语言:javascript
复制
   Timer timer = new Timer(delayInMillis);
   timer.add(new ActionListener());

然后在同一个班上有一个..。

代码语言:javascript
复制
     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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13864385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档