import java.awt.Color;
import java.awt.FlowLayout;
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 ButtonBlinker extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton startButton = null;
private JButton pauseButton = null;
private JButton stopButton = null;
private static int blinkInterval = 200; // milliseconds
private enum Status { STOPPED, RUNNING, PAUSED };
private Status status = Status.STOPPED;
private boolean blink = false;
private Color pauseColor;
private Timer pauseTimer;
/**
* This is the default constructor
*/
public ButtonBlinker(){
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize(){
this.setSize(291, 103);
this.setTitle("Button Blinker");
this.setContentPane(getJContentPane());
pauseColor = pauseButton.getForeground();
updateCommandButtons(status = Status.STOPPED);
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane(){
if(jContentPane==null){
jContentPane=new JPanel();
jContentPane.setLayout(new FlowLayout());
jContentPane.add(getStartButton(), null);
jContentPane.add(getPauseButton(), null);
jContentPane.add(getStopButton(), null);
}
return jContentPane;
}
/**
* This method initializes startButton
*
* @return javax.swing.JButton
*/
private JButton getStartButton(){
if(startButton==null){
startButton=new JButton();
startButton.setText("start");
startButton.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
startButtonActionPerformed(e);
}
});
}
return startButton;
}
/**
* This method initializes pauseButton
*
* @return javax.swing.JButton
*/
private JButton getPauseButton(){
if(pauseButton==null){
pauseButton=new JButton();
pauseButton.setText("pause");
pauseButton.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
pauseButtonActionPerformed(e);
}
});
}
return pauseButton;
}
/**
* This method initializes stopButton
*
* @return javax.swing.JButton
*/
private JButton getStopButton(){
if(stopButton==null){
stopButton=new JButton();
stopButton.setText("stop");
stopButton.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
stopButtonActionPerformed(e);
}
});
}
return stopButton;
}
private void stopTimer(Timer timer) {
if (timer != null) timer.stop();
timer = null;
}
private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
updateCommandButtons(status = Status.RUNNING);
}
private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) {
updateCommandButtons(switchSuspended());
// setup or stop blinker
if (status == Status.PAUSED) {
(pauseTimer = new Timer(blinkInterval, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
pauseButton.setForeground((blink = !blink) ? pauseColor : Color.RED);
}})).start();
} else {
stopTimer(pauseTimer);
}
}
private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {
updateCommandButtons(status = Status.STOPPED);
stopTimer(pauseTimer);
}
private Status switchSuspended() { return status = (status == Status.RUNNING ? Status.PAUSED : Status.RUNNING); }
public void updateCommandButtons(Status status) {
switch (status) {
case RUNNING:
startButton.setEnabled(false);
pauseButton.setEnabled(true);
stopButton.setEnabled(true);
pauseButton.setForeground(pauseColor);
System.out.println("started");
break;
case PAUSED:
startButton.setEnabled(false);
pauseButton.setEnabled(true);
stopButton.setEnabled(true);
System.out.println("paused");
break;
case STOPPED:
startButton.setEnabled(true);
pauseButton.setEnabled(false);
stopButton.setEnabled(false);
System.out.println("stopped");
break;
}
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
ButtonBlinker thisClass=new ButtonBlinker();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
}