2012-09-01 188 views
4

我想在按下按鈕時使用Java繼續執行工作。當按鈕被釋放時,工作應該停止。類似這樣的:如何在按下按鈕時繼續執行工作?

Button_is_pressed() 
{ 
    for(int i=0;i<100;i++) 
    { 
     count=i; 
     print "count" 
    } 
} 

我該如何做到這一點?

+1

這是你想要的嗎? http://stackoverflow.com/questions/1719166/making-a-jbutton-stay-depressed-manually – AnujKu

+1

我不能說這是一個好主意,主要是因爲事件隊列的工作方式。如果你阻止當按鈕按下時,你將永遠不會收到一個鼠標向上事件... – MadProgrammer

+0

沒有我想要的是每當用戶保持按下按鈕,那麼一些過程應該開始..當用戶離開那個按下按鈕,那應該是停止 –

回答

9

方式一:

  • 到JButton的ButtonModel的
  • 添加一個ChangeListener在這個監聽器檢查模型的isPressed()方法和打開或關閉根據其狀態的搖擺定時器。
  • 如果你想要一個後臺進程,那麼你可以用相同的方式執行或取消一個SwingWorker。

前者的一個例子:

import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class ButtonPressedEg { 
    public static void main(String[] args) { 
     int timerDelay = 100; 
     final Timer timer = new Timer(timerDelay , new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Button Pressed!"); 
     } 
     }); 

     JButton button = new JButton("Press Me!"); 
     final ButtonModel bModel = button.getModel(); 
     bModel.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent cEvt) { 
      if (bModel.isPressed() && !timer.isRunning()) { 
       timer.start(); 
      } else if (!bModel.isPressed() && timer.isRunning()) { 
       timer.stop(); 
      } 
     } 
     }); 

     JPanel panel = new JPanel(); 
     panel.add(button); 


     JOptionPane.showMessageDialog(null, panel); 

    } 
} 
+3

+1不那麼複雜,那麼我在想 – MadProgrammer

+0

thanx很多..我想要的東西... –

+0

不客氣! –

2

您可能需要使用mousePressed事件開始行動

並使用mouseReleased事件停止行動(這個 是neccesary)

欲瞭解更多信息,請參閱here

+1

不,我敦促你不要爲此使用MouseListener。首先,即使你試圖通過禁用JButton來阻止它工作,MouseListener仍然可以工作。通常最好避免在JButton中使用MouseListeners。 –

+1

@Hov我只爲最後一句+1。評論的其餘部分也是非常好的建議。 –

相關問題