Проблема с таймером Java? - PullRequest
       1

Проблема с таймером Java?

1 голос
/ 25 октября 2011

После совета из другой ветки я без особой радости играл с классом таймера. Вот мой код:

 public void buttonImageReveal(ActionEvent e){

        Timer gameTimer = new Timer(100, new ActionListener() {

            public void actionPerformed(ActionEvent e) {

              repaint();
            }
          });

        String temp = e.getActionCommand();

        switch(temp){
                        case "1":
                            System.out.println("case1");                            
                            ((JButton)e.getSource()).setIcon(one);
                            gameTimer.start();
                            ((JButton)e.getSource()).setIcon(null);
                            break;

Все, что я хочу, это 1-секундный промежуток между изображением, которое было показано в виде значка, а затем удалено. Только один раз, когда кнопка нажата. На данный момент я просто получаю пустую кнопку при нажатии?

ТИА

Edit:

     public void actionPerformed(ActionEvent e) {
          System.out.println(e);
          lastImage();

        }

      });

public void buttonImageReveal(ActionEvent e){ 

        String temp = e.getActionCommand();

        switch(temp){
                        case "1":                       
                            ((JButton)e.getSource()).setIcon(one); 
                            lastBtn = ((JButton)e.getSource()); 
                            gameTimer.start();

                            break;

Теперь он делает то, что должен, но таймер продолжает работать, что вы делаете, когда закончите и хотите, чтобы это прекратилось?!

Ответы [ 5 ]

4 голосов
/ 25 октября 2011

Вы устанавливаете значок, запускаете таймер, а затем немедленно удаляете значок. Метод start() из таймера почти сразу же вернется, и таймер выполнит свою задачу асинхронно. Вам нужно будет удалить значок в методе actionPerformed.

1 голос
/ 25 октября 2011

Вы немного прихотливые простые вещи,

      timer1 = new Timer(1000, new AbstractAction() {

        private static final long serialVersionUID = 1L;

        @Override
        public void actionPerformed(ActionEvent e) {
            random = new Random();
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    button1.setSomething(something);
                    button1.validate(); //not required for all methods
                    button1.repaint();  //not required for all methods
                }
            });
        }
    });
    timer1.setDelay(500);
    timer1.setRepeats(true);
    timer1.start();

примеры здесь и здесь

не забудьте остановить свой Timer#stop() или если вы хотите запустить этот код только один раз, тогда setRepeats(false)

1 голос
/ 25 октября 2011

Попробуйте установить значок в ноль, когда таймер срабатывает.Я также обновил в оригинальной теме.Так что код должен быть:

public void buttonImageReveal(final ActionEvent e){

        Timer gameTimer = new Timer(100, new ActionListener() {

            public void actionPerformed(ActionEvent e) {

              ((JButton)e.getSource()).setIcon(null);
            }
          });

        String temp = e.getActionCommand();

        switch(temp){
                        case "1":
                            System.out.println("case1");                            
                            ((JButton)e.getSource()).setIcon(one);
                            gameTimer.start();                                
                            break;
0 голосов
/ 25 октября 2011

Вместо того, чтобы создавать новый таймер, вы можете использовать

Thread.sleep(1000);

заменить

gameTimer.start();
0 голосов
/ 25 октября 2011

Вместо вызова repaint () через 100 мс (думаю, должно быть 1000 мс = 1 с) измените компоненты через 1 с.Сделайте это, заменив repaint () изменяющимся методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...