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.