Note that there are some explanatory texts on larger screens.

plurals
  1. POStarting and Stopping a Thread-JButton Alignment
    primarykey
    data
    text
    <p>I am trying to create a simple Timer with a Start Stop and Reset Button. I am new to using the Threads and ActionListeners. I have this working, and can get my timer to begin, and my button to change text from start to stop. But after that i am stuck. I need to stop the timer, and then start it again, if i press the start button. Then of course reset turns it back to zero. I do not want to use <code>java.util.Timer</code>, i just want to use threads. How would i get my thread once started, to pause and then resume. I tried using the built in methods, but i could not get it to compile right. </p> <pre><code>import javax.swing.*; import java.awt.Font; import java.lang.String; import java.awt.*; public class Timer extends JPanel { // Here are the fields from below! private static JLabel label = new JLabel(" 0.00 seconds"); private static javax.swing.JButton start = new javax.swing.JButton("Start"); private static javax.swing.JButton reset = new javax.swing.JButton("reset"); /** * Here is the Timer method- Begins with JLabel with medium alignment. */ public Timer() { //new Thread(this).start(); //label = new JLabel(" 0.00 Seconds"); //this.label = label; reset(); } /** * Here is the Reset method- pressing this button from below will * stop the thread and reset the text. */ public static void reset() { label.setFont(new Font("Arial",Font.BOLD,36)); label.setText(" 0.00 Seconds"); } public static void startStop() { //start.setText("stop"); //validate(); } public static void countDown() { int Msec=0,min=0,sec=0; while(sec &lt; 60) { label.setText(min+":"+sec+":"+Msec); //label.setLayout(new BorderLayout.CENTER); //label. Msec++; if(Msec==60) { Msec=0; sec++; //label.setText(min+":"+sec+":"+Msec); } if(sec ==60) { Msec =0; sec = 0; min++; } try { Thread.sleep(10); } catch(Exception e) {} } } public static void main(String [] args) { // we need a JFrame to put these elements into javax.swing.JFrame win = new javax.swing.JFrame("Timer"); // here we are instantating a new timer final Timer time = new Timer(); //Annonymous inner class start.addActionListener(new java.awt.event.ActionListener() { // here is the action performed method to start this. public void actionPerformed(java.awt.event.ActionEvent e) { //here we are creating a new thread to run throwable // every click creates a new Thread ( so it goes faster) String text = (String)e.getActionCommand(); if (text.equals("Start")){ start.setText("Stop"); } else{ start.setText("Start"); } Thread restart = new Thread(new Runnable() { public void run() { countDown(); //startStop(); } }); restart.start(); } }); //Look at the below abstract actionlistener below to get reset to work javax.swing.JButton reset = new javax.swing.JButton("reset"); // here we are creating a new annonomys inner class.... check the // curly braces reset.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { Thread restart = new Thread(new Runnable() { public void run() { reset(); //Thread.stop(); } }); restart.destroy(); } }); //label.setVisible(true); javax.swing.JPanel tb = new javax.swing.JPanel(); tb.add(reset); tb.add(start); //tb.add(circle); win.add(tb,java.awt.BorderLayout.NORTH); win.setSize(300,300); //win.add(tb); win.add(label,java.awt.BorderLayout.CENTER); win.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE); // hiding inside setVisible is borderLayout win.setVisible(true); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload