1

毎秒右(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();  
        }
}

あらゆる種類の助けに感謝します

4

3 に答える 3

6
  • クラス名は大文字で始まります。Help
  • Swing コンポーネントは、Event Dispatch Thread
  • 次のように新しいThreadものが作成されます。

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            //work here
        }
    });
    t.start();//start thread
    

ただし、SwingTimerを実行することをお勧めし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();

参照:

于 2012-11-05T05:23:54.733 に答える
2

Swingこれは単純なパズルゲームの例です。

Java スイング シャッフル ゲーム

ボタンを押すPauseと、一時停止を解除するまでタイトルがアニメーションになります。にも同様に使用できますJLabel。ソースコードも添付されています。

それがあなたに大いに役立つことを願っています。

于 2012-11-05T05:31:47.460 に答える
1

thread.sleep(1000);コンストラクターのその部分をスレッドに配置すると、(1 秒の遅延で 1000 ミリ秒) を呼び出してから更新できます。これにより、ターゲットが画面全体に移動します。

于 2012-11-05T05:16:27.503 に答える