2012-09-01 7 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

아니요 원하는 것은 사용자가 버튼을 계속 누른 상태에서 몇 가지 프로세스를 시작해야한다는 것입니다. stop –

답변

9

한 가지 방법 :

  • 모델의 isPressed() 방법을 확인하고 또는 그 상태에 따라 스윙 타이머 켜고 끌이 수신기에서의 JButton의 ButtonModel에
  • 에 ChangeListener를 추가합니다.
  • 백그라운드 프로세스를 원하면 같은 방법으로 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

고맙다고 생각했다. 내가 원하는 것을 exectly ... –

+0

당신을 환영합니다! –

2

당신은 행동

를 시작하고 작업을 중지 mouseReleased 이벤트를 사용하는 mousePressed 이벤트를 사용해야 할 수 있습니다 (이 자세한 내용은 neccesary)

이 당신이 원하는 무엇인가 here

+1

아니요,이 경우 MouseListener를 사용하지 않는 것이 좋습니다. 하나의 경우 JButton을 비활성화하여 작동하지 못하게하려고해도 MouseListener는 계속 작동합니다. 일반적으로 JButton과 함께 MouseListener를 사용하지 않는 것이 가장 좋습니다. –

+1

@Hov 그냥 마지막 문장에 +1 했어. 코멘트의 나머지 부분도 훌륭한 조언이었습니다. –

관련 문제