I fixed the problem with your button on my Windows XP computer by invoking SwingUtilities.
I formatted your java code.
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.Timer; public class TwoButtonsTest implements Runnable { JFrame frame; Timer timer; boolean isClicked; public static void main(String[] args) { SwingUtilities.invokeLater(new TwoButtonsTest()); } @Override public void run() { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); JButton startButton = new JButton("Start"); startButton.addActionListener(new StartListener()); JButton stopButton = new JButton("Stop"); stopButton.addActionListener(new StopListener()); final DrawPanel myDraw = new DrawPanel(); frame.getContentPane().add(BorderLayout.CENTER, myDraw); frame.getContentPane().add(BorderLayout.NORTH, startButton); frame.getContentPane().add(BorderLayout.SOUTH, stopButton); frame.setVisible(true); timer = new Timer(50, new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { myDraw.repaint(); } }); } class StartListener implements ActionListener { public void actionPerformed(ActionEvent e) {
To clear the screen when you click the Start button, you will have to add some methods to the DrawPanel class.
Here is one way to do it.
class DrawPanel extends JPanel { protected boolean eraseCanvas; public void setEraseCanvas(boolean eraseCanvas) { this.eraseCanvas = eraseCanvas; } @Override public void paintComponent(Graphics g) { if (eraseCanvas) { g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(), getHeight()); } else { int red = (int) (Math.random() * 256); int blue = (int) (Math.random() * 256); int green = (int) (Math.random() * 256); g.setColor(new Color(red, blue, green)); Random rand = new Random();
source share