簡體   English   中英

如何每秒移動jlabel?

[英]how to move jlabel every second?

我嘗試每秒鍾將其移到右側(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 

但是我建議使用Swing Timer因為它在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();

參考:

這是一個簡單的益智游戲的Swing示例。

Java Swing Shuffle游戲

當您按下“ Pause按鈕時,標題將變為動畫,直到您釋放暫停。 同樣,您可以將其用於JLabel 還附帶了源代碼。

希望對您有所幫助。

如果將構造函數的該部分放在線程中,則可以調用thread.sleep(1000); (1000毫秒(1秒鍾的延遲)),然后刷新,這將使目標在屏幕上移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM