Criando um botão Pause/Continue em Java

Olá ,

Estou iniciando meus estudos em java, estou trabalhando em um código de um cronometro.

Já consegui o botão de iniciar e zerar funcionando perfeitamente, mas o botão de pausar/Continuar não estou conseguindo. Só consegui um botão que só pausa, gostaria da ajuda dos senhores para achar uma solução, em que um mesmo botão, possa pausar e continuar.

Desde já agradeço a colaboração !

Vai depender de como vc fez o cronometro. Provavelmente irá precisar de um acumulador que pode ser acrescido a cada pausa ou a cada loop/passo.

Exemplo:

boolean pausa = false;
int passo = 1;
int acumulador = 0;

//...........//

if (pausa == false) {
    passo = 1;
} else {
    passo = 0;
}
acumulador = acumulador + passo;

//...........//

System.out.println("Tempo " + acumulador + " segundos");

Para o botão, faça um listener como:

pausa = ! pausa;
if (pausa == true) {
    botao.setText("Continuar");
} else {
    botao.setText("Pausar");
}

Olá amigo segue o código, do cronometro:

private JButton iniciar;
private static JLabel lConta;
private JPanel mainPanel;
private JButton pausar;
private JButton zerar;

public static void main(String[] args) {
	new PrincipalTela().montaTela();
	Cronometro cont = new Cronometro(lConta);
	cont.start();
}
private void montaTela(){
	this.setTitle("Cronometro");
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.setSize(240, 120);
            
            
    mainPanel = new javax.swing.JPanel();
    lConta = new javax.swing.JLabel();
    iniciar = new javax.swing.JButton();
    pausar = new javax.swing.JButton();
    zerar = new javax.swing.JButton();
    mainPanel.setName("mainPanel");
    lConta.setText("00:00:00"); 
    lConta.setName("lConta"); 
    iniciar.setText("Iniciar"); 
    iniciar.setName("iniciar"); 
    
    
    iniciar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            iniciarActionPerformed(evt);
        }
    });
    pausar.setText("Pausar/Continuar"); 
    pausar.setName("pausar/Continuar"); 
    
    pausar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            pausarActionPerformed(evt);
            
            
        }
    });
    zerar.setText("Zerar"); 
    zerar.setName("zerar"); 
    zerar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            zerarActionPerformed(evt);
        }
    });
    javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
    mainPanel.setLayout(mainPanelLayout);
    mainPanelLayout.setHorizontalGroup(
        mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(mainPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(lConta, javax.swing.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE)
                .addGroup(mainPanelLayout.createSequentialGroup()
                    .addComponent(iniciar)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
                    .addComponent(pausar)
                    .addGap(32, 32, 32)
                    .addComponent(zerar)))
            .addContainerGap())
    );
    mainPanelLayout.setVerticalGroup(
        mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(mainPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(lConta)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(iniciar)
                .addComponent(zerar)
                .addComponent(pausar))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    this.add(mainPanel);
    this.setVisible(true);
}
private void iniciarActionPerformed(ActionEvent evt) {
    contador = true;
    iniciar.setEnabled(false);
    pausar.setEnabled(true);
    zerar.setEnabled(false);
}
private void pausarActionPerformed(ActionEvent evt) {

contador = false;

    iniciar.setEnabled(true);
    pausar.setEnabled(true);
    zerar.setEnabled(true);
   
}
private void zerarActionPerformed(ActionEvent evt) {
	contador = false;
	lConta.setText("00:00:00");
	zerado = true;
	lConta.revalidate();
    iniciar.setEnabled(true);
    pausar.setEnabled(false);
}
public static boolean isContador(){
	return contador;
}
public static boolean isZerado(){
	return zerado;
}
public static void setZerado(boolean zero){
	zerado = zero;
}

}

Olá amigo, segue o código:

package projeto_cronometro2;

import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class PrincipalTela extends JFrame {
private static final long serialVersionUID = 1L;
private static boolean contador = false;
private static boolean zerado = false;
private static boolean pausa = false;

private JButton iniciar;
private static JLabel lConta;
private JPanel mainPanel;
private JButton pausar;
private JButton zerar;

public static void main(String[] args) {
	new PrincipalTela().montaTela();
	Cronometro cont = new Cronometro(lConta);
	cont.start();
}
private void montaTela(){
	this.setTitle("Cronometro");
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.setSize(240, 120);
            
            
    mainPanel = new javax.swing.JPanel();
    lConta = new javax.swing.JLabel();
    iniciar = new javax.swing.JButton();
    pausar = new javax.swing.JButton();
    zerar = new javax.swing.JButton();
    mainPanel.setName("mainPanel");
    lConta.setText("00:00:00"); 
    lConta.setName("lConta"); 
    iniciar.setText("Iniciar"); 
    iniciar.setName("iniciar"); 
    
    
    iniciar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            iniciarActionPerformed(evt);
        }
    });
    pausar.setText("Pausar/Continuar"); 
    pausar.setName("pausar/Continuar"); 
    
    pausar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            pausarActionPerformed(evt);
            
            
        }
    });
    zerar.setText("Zerar"); 
    zerar.setName("zerar"); 
    zerar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            zerarActionPerformed(evt);
        }
    });
    javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
    mainPanel.setLayout(mainPanelLayout);
    mainPanelLayout.setHorizontalGroup(
        mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(mainPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(lConta, javax.swing.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE)
                .addGroup(mainPanelLayout.createSequentialGroup()
                    .addComponent(iniciar)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
                    .addComponent(pausar)
                    .addGap(32, 32, 32)
                    .addComponent(zerar)))
            .addContainerGap())
    );
    mainPanelLayout.setVerticalGroup(
        mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(mainPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(lConta)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(iniciar)
                .addComponent(zerar)
                .addComponent(pausar))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    this.add(mainPanel);
    this.setVisible(true);
}
private void iniciarActionPerformed(ActionEvent evt) {
    contador = true;
    iniciar.setEnabled(false);
    pausar.setEnabled(true);
    zerar.setEnabled(false);
}
private void pausarActionPerformed(ActionEvent evt) {

contador = false;

    iniciar.setEnabled(true);
    pausar.setEnabled(true);
    zerar.setEnabled(true);
   
}
private void zerarActionPerformed(ActionEvent evt) {
	contador = false;
	lConta.setText("00:00:00");
	zerado = true;
	lConta.revalidate();
    iniciar.setEnabled(true);
    pausar.setEnabled(false);
}
public static boolean isContador(){
	return contador;
}
public static boolean isZerado(){
	return zerado;
}
public static void setZerado(boolean zero){
	zerado = zero;
}

}

public class Cronometro {
  long tempo = 0;
  Timer timer;
  boolean pausa = true;

  public Cronometro(Jlabel label) {
    timer = new Timer();
    TimerTask tarefa = new TimerTask() {
        @Override
        public void run() {
            if (pausa == false) {
                tempo += 1;
               label.setText(tempo); // em segundos;
            }
        }
    };

    timer.schedule(tarefa, 1000l);
  }

  public void iniciar() {
     pausa = false;
    tempo = 0;
  }

  public void pausarContinuar() {
    pausa = !pausa;
  }
  public void parar() {
    pausa = true;
    tempo = 0;
   }
}

Depois no jframe é só fazer a chamada dos metodos do cronometro
Pesquisando, vc poderá encontrar um cronometro pronto.