How can I keep executing work while a button is pressed?

后端 未结 3 1563
醉话见心
醉话见心 2021-01-13 09:25

I want to keep executing work while a button is pressed, using Java. When the button is released, the work should stop. Something like this:

Button_is_presse         


        
相关标签:
3条回答
  • 2021-01-13 09:51

    You may need to use mousePressed event to start the action

    And use mouseReleased event to stop the action (This is neccesary)

    For more information refer here

    0 讨论(0)
  • 2021-01-13 09:59

    One way:

    • Add a ChangeListener to the JButton's ButtonModel
    • In this listener check the model's isPressed() method and turn on or off a Swing Timer depending on its state.
    • If you want a background process, then you can execute or cancel a SwingWorker in the same way.

    An example of the former:

    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);
    
       }
    }
    
    0 讨论(0)
  • 2021-01-13 10:10

    I want to keep executing work while a button is pressed

    Execute that process in another thread and then your form is not block and you can press the button to cancel or stop the execution.

    see :

    • How to stop threads of a Java program?
    • Stop/cancel SwingWorker thread?
    • Control thread through button
    0 讨论(0)
提交回复
热议问题