2017-09-18 118 views
0

如何在每秒之後自動點擊JButton自動重複點擊JButton

我試過編輯執行的按鈕操作,但是不起作用。

+1

爲什麼要這樣做?如果你想自動觸發某個動作,那麼*點擊*按鈕是錯誤的方法! – GhostCat

+0

1)請參閱[什麼是XY問題?](http://meta.stackexchange.com/q/66377)按鈕的動作偵聽器可能更好地調用方法。然後使用Swing'Timer'來調用相同的方法。 2)*「我嘗試過編輯按鈕操作,但不起作用。」*爲什麼不呢?什麼,*特別*失敗? 3)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

回答

1

您可以使用Swing的定時器類和

doClick方法與AbstractButton。 這是一個完整的源代碼。

package stackoverflow; 

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 

public class JButtonTimer extends JPanel { 

    private static final long serialVersionUID = 1L; 
    private static final int SCREEN_WIDTH = 500; 
    private static final int SCREEN_HEIGHT = 500; 

    public JButtonTimer() { 
     final JButton clickBtn = new JButton("clickMe"); 
     clickBtn.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       System.out.println(e.getActionCommand()); 

      } 
     }); 

     add(clickBtn); 

     Timer timer = new Timer(1 * 1000, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       clickBtn.doClick(); 
      } 

     }); 
     timer.start(); 


    } 


    public Dimension getPreferredSize() { 
     return new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT); 
    } 

    public static void createAndShowGui() { 
     JFrame frame = new JFrame(); 
     frame.add(new JButtonTimer()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.pack(); 
     frame.setVisible(true); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 
1

使用SwingTimer,並呼籲doClick按鈕

import javax.swing.JButton; 
import javax.swing.Timer; 

public class ButtonClicker implements ActionListener { 

    private JButton btn; 
    private Timer timer; 

    public ButtonClicker(JButton btn) { 
     this.btn = btn; 
     timer = new Timer(1000, this); 
    } 

    public void start() { 
     timer.start(); 
    } 

    public void stop() { 
     timer.stop(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     btn.doClick(); 
    } 

} 

更多細節

How to use Swing Timers
0

你可以把它變成的windowOpened幀事件

Timer t = new Timer(1000, jButton.doClick()); 
t.start(); 
+1

由於['JButton#doClick'](https://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractButton.html#doClick--)返回'void',因此您的代碼示例不會編譯 - 因爲'void'不是'ActionListener'的實例 – MadProgrammer