首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 按鈕觸發組件移動:用定時器而非線程

     編輯:程式設計疑難解答

問題

想為按鈕添加線程,點擊後讓組件按速度移動。

回答

**不需要也不建議為按鈕創建線程**。Swing/AWT 事件分發線程(EDT)處理 UI 更新,若在新線程中直接操作組件會導致併發問題,仍需 `SwingUtilities.invokeLater` 回到 EDT,等同單線程。

正確方案:javax.swing.Timer

Timer timer = new Timer(50, new ActionListener() { // 50ms 間隔
    @Override
    public void actionPerformed(ActionEvent e) {
        component.setLocation(component.getX() + 5, component.getY()); // 移動邏輯
        if (到達目標) ((Timer)e.getSource()).stop();
    }
});
button.addActionListener(e -> timer.start());
  • `Timer` 在 EDT 執行,安全更新 UI。
  • 間隔可調,邏輯簡單清晰。

避免

不要用 `Thread.sleep` 循環或 `new Thread` 直接操作組件屬性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved