当前位置: 首页 > 面试题库 >

如何每秒移动jlabel?

缑嘉玉
2023-03-14
问题内容

我尝试每秒钟将其移到右侧(x ++)

我尝试用螺纹移动它。

  1. 怎么做?(并且可以看到它每秒移动一次)
  2. 还有另一种不用线程的方法吗?
  3. 我应该使用什么布局管理器?

我在这里尝试

public class help {
    JFrame frame = new JFrame();
    JLabel label = new JLabel("target");

    public help() {
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(800,600);
        frame.setLayout(new GridLayout());
        frame.add(label);
        label.setPreferredSize(new Dimension(100,100));
        label.setLocation(400, 300);

        frame.getContentPane().validate();
        frame.repaint();
        frame.setVisible(true);

        mysterious();
    }

    void mysterious(){
     ////////////////////////////////
     // part of edit responding David kroukamp  
    Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
         try{

            for (int z=0; z<10; z++){
            label.setLocation((label.getLocationOnScreen().x+10), label.getLocationOnScreen().y);
            Thread.sleep(1000);  
            } 
        }catch(Exception ae){

    }
    }
});
t.start();
    //////////////////////////////



    }
    public static void main(String[]args){
        new help();  
        }
}

非常感谢您的任何帮助


问题答案:
  • 类名以大写字母开头,即 Help
  • Swing组件应在以下位置创建和修改 Event Dispatch Thread
  • 这样Thread创建一个新的:
    Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        //work here
    }
    

    });
    t.start();//start thread

但是我建议在Timer它上运行一个Swing EDT

  • 如何使用摇摆计时器

编辑:

根据您的问题,我建议使用Timer创建线程点用于一般知识。

探测是线程未在您的swing GUI的EDT线程上运行,就像Timer这样:

 int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      int count=0;
      public void actionPerformed(ActionEvent evt) {
           if(count==10) {//we did the task 10 times
                 ((Timer)evt.getSource()).stop();
            }

            label.setLocation((label.getLocationOnScreen().x+10), label.getLocationOnScreen().y);
            System.out.println(SwingUtilities.isEventDispatchThread());
           count++;
      }
  };
  new Timer(delay, taskPerformer).start();

参考:

  • http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html


 类似资料:
  • 问题内容: 我希望简单的动画每0.5秒设置一次位置,但它不会仅在循环结束时设置动画。 int x = 1; int y = 1; 我已经尝试过使用thread.sleep()绘制动画,并且可以正常工作,但动画确实正确,但不幸的是,这对我来说不是一个选择,因为我需要在框架内移动jlabel并在其中放置图形图片。有人可以帮助我解决这个问题。 我已经尝试过这两个相同的结果 问题答案: 与其使用Java

  • 目前,我在我的视频右下方添加水印,以防止其他人重新发布它。然而,它们模糊了水印,所以我想添加一个移动水印,每隔x秒改变它的位置。 下面是我当前的ffmpeg命令: 如何每隔30秒让水印位置从右下到右上,到左上,再到左下?谢谢你。

  • 问题内容: 可以说我想做一个循环或每秒打印出来的内容,例如“ Mario”。我怎样才能做到这一点?似乎找不到任何可以在任何地方教授此内容的优秀教程= P 问题答案: 您可以使用java.util.Timer。 任务是您要执行的方法,之后是直到第一次执行的时间,间隔是上述任务的两次执行之间的时间。

  • 问题内容: 我想知道如何每x秒重绘和更新JPanel的背景…这是我的代码: 我的代码有2个问题:1-JPanel根本没有被绘制。2-第一张可以打印,然后每次打印数量增加一倍。有什么建议吗?先感谢您 更新:我以这种方式解决了这个问题: 更新2: 问题答案: 使用Swing计时器,

  • 问题内容: 如果我希望每N秒重新加载整个页面,则可以在HTML中输入以下内容: 是否有针对AJAX调用执行相同操作的标准做法?我想安排一个AJAX调用每10秒关闭一次,以便更新页面的某些部分,而不刷新整个页面。如果我可以在不同的时间安排多个AJAX调用会更好,因为页面的某些部分可能需要比其他部分更频繁地更新。 TIA 问题答案: 您可以使用或(后者可能最适合您想要的操作)。 …其中是一个通过AJA

  • 我正在尝试使用 DropWizard 指标库在我的应用程序上测量应用程序和 jvm 级别的指标。 下面是我的度量类,我在代码中使用它来增加/减少度量。我正在调用下面类的< code>increment和< code>decrement方法来递增和递减度量。 下面是我如何使用上面的<code>TestMetrics</code>类来根据需要增加度量的基础。下面的方法由多个线程调用。 现在我有了另一个