Results 1 to 2 of 2
  1. #1
    TechMax is offline Member
    Join Date
    Feb 2011
    Posts
    1
    Rep Power
    0

    Default Timer fire twice?

    Hi, experts:
    I started learning Swing programming by writing a demo(source code listed below) with Eclipse + JDK1.6. Please find screen shot of this demo at the end of this post.

    It worked well when i press "move" button to select NEXT RadioButton. Later, i added a Swing Timer in order to select NEXT RadioButton per second (press "auto" button to start the Timer). But the next-next RadioButton was selected when i run the demo. I debugged and found the Timer Event fired twice every 1 second. What's wrong in my code?



    Following is the source code:

    package components;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.Timer;

    public class RadioButtonDemo extends JPanel
    implements ActionListener{

    /**
    *
    */
    private static final long serialVersionUID = 1L;

    static String birdString = "Bird";
    static String catString = "Cat";
    static String dogString = "Dog";
    static String rabbitString = "Rabbit";
    static String pigString = "Pig";

    JLabel buttonLabel;
    JButton moveButton,autoButton,stopButton;
    JRadioButton birdButton, catButton, dogButton, rabbitButton, pigButton;

    Timer timer = new Timer(1000,this);

    public RadioButtonDemo() {
    super(new BorderLayout());

    //Create the MOVE button.
    moveButton = new JButton("move");
    moveButton.setActionCommand("move");
    //Create the AUTO button.
    autoButton = new JButton("auto");
    autoButton.setActionCommand("auto");
    //Create the STOP button.
    stopButton = new JButton("stop");
    stopButton.setActionCommand("stop");
    stopButton.setEnabled(false);

    //Create the radio buttons.
    birdButton = new JRadioButton(birdString);
    birdButton.setMnemonic(KeyEvent.VK_B);
    birdButton.setActionCommand(birdString);
    birdButton.setSelected(true);

    catButton = new JRadioButton(catString);
    catButton.setMnemonic(KeyEvent.VK_C);
    catButton.setActionCommand(catString);

    dogButton = new JRadioButton(dogString);
    dogButton.setMnemonic(KeyEvent.VK_D);
    dogButton.setActionCommand(dogString);

    rabbitButton = new JRadioButton(rabbitString);
    rabbitButton.setMnemonic(KeyEvent.VK_R);
    rabbitButton.setActionCommand(rabbitString);

    pigButton = new JRadioButton(pigString);
    pigButton.setMnemonic(KeyEvent.VK_P);
    pigButton.setActionCommand(pigString);

    //Group the radio buttons.
    ButtonGroup group = new ButtonGroup();
    group.add(birdButton);
    group.add(catButton);
    group.add(dogButton);
    group.add(rabbitButton);
    group.add(pigButton);



    //Register a listener for the radio buttons.
    birdButton.addActionListener(this);
    catButton.addActionListener(this);
    dogButton.addActionListener(this);
    rabbitButton.addActionListener(this);
    pigButton.addActionListener(this);

    moveButton.addActionListener(this);
    autoButton.addActionListener(this);
    stopButton.addActionListener(this);

    /*
    //Set up the picture label.
    picture = new JLabel(createImageIcon("images/"
    + birdString
    + ".gif"));

    //The preferred size is hard-coded to be the width of the
    //widest image and the height of the tallest image.
    //A real program would compute this.
    picture.setPreferredSize(new Dimension(177, 122));
    */


    //Put the radio buttons in a column in a panel.
    JPanel radioPanel = new JPanel(new GridLayout(0, 1));
    radioPanel.add(birdButton);
    radioPanel.add(catButton);
    radioPanel.add(dogButton);
    radioPanel.add(rabbitButton);
    radioPanel.add(pigButton);

    add(radioPanel, BorderLayout.LINE_START);
    add(moveButton,BorderLayout.NORTH);
    add(autoButton,BorderLayout.CENTER);
    add(stopButton,BorderLayout.EAST);
    setBorder(BorderFactory.createEmptyBorder(20,20,20 ,20));
    }

    /** Listens to the radio buttons. */
    public void actionPerformed(ActionEvent e) {
    if ("move".equals(e.getActionCommand()) || "timer".equals(e.getActionCommand())) {
    if(birdButton.isSelected()){
    catButton.setSelected(true);
    }
    else if(catButton.isSelected()){
    dogButton.setSelected(true);
    }
    else if(dogButton.isSelected()){
    rabbitButton.setSelected(true);
    }
    else if(rabbitButton.isSelected()){
    pigButton.setSelected(true);
    }
    else if(pigButton.isSelected()){
    birdButton.setSelected(true);
    }
    }

    else if("auto".equals(e.getActionCommand())){

    timer.addActionListener(this);
    timer.setActionCommand("timer");
    timer.setInitialDelay(1000);
    timer.start();
    stopButton.setEnabled(true);
    }
    else if("stop".equals(e.getActionCommand())){
    timer.stop();
    stopButton.setEnabled(false);
    }

    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    /*protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = RadioButtonDemo.class.getResource(path);
    if (imgURL != null) {
    return new ImageIcon(imgURL);
    } else {
    System.err.println("Couldn't find file: " + path);
    return null;
    }
    }*/

    /**
    * Create the GUI and show it. For thread safety,
    * this method should be invoked from the
    * event-dispatching thread.
    */
    private static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("RadioButtonDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);

    //Create and set up the content pane.
    JComponent newContentPane = new RadioButtonDemo();
    newContentPane.setOpaque(true); //content panes must be opaque
    frame.setContentPane(newContentPane);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
    }

    public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    createAndShowGUI();
    }
    });
    }


    }



    Anybody help?
    Thanks a lot.

  2. #2
    KevinWorkman's Avatar
    KevinWorkman is offline Crazy Cat Lady
    Join Date
    Oct 2010
    Location
    Washington, DC
    Posts
    4,038
    Rep Power
    10

    Default

    Yikes. When posting code, please use the code tags to preserve formatting. Nobody wants to read unformatted code, especially when it's a painful orange color.

    Also, code should be in the form of an SSCCE- take out any code not directly related to the problem at hand.
    How to Ask Questions the Smart Way
    Static Void Games - Play indie games, learn from game tutorials and source code, upload your own games!

Similar Threads

  1. Fire Event When Thread is Complete
    By Jonah Bron in forum Threads and Synchronization
    Replies: 18
    Last Post: 10-29-2010, 08:12 PM
  2. KeyAdapter won't fire
    By billq in forum New To Java
    Replies: 5
    Last Post: 04-14-2010, 03:37 AM
  3. Fire j2me 2.0 alpha
    By Java Tip in forum Java Software
    Replies: 0
    Last Post: 07-29-2008, 05:24 PM
  4. Replies: 0
    Last Post: 04-04-2008, 03:46 PM
  5. Fire j2me 1.2
    By JavaBean in forum Java Software
    Replies: 0
    Last Post: 06-22-2007, 12:46 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •