Форум программистов, компьютерный форум, киберфорум
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 2
1

Запуск и остановка таймера по нажатию кнопки

22.04.2015, 21:03. Показов 4491. Ответов 2
Метки нет (Все метки)

Добрый день.
Прошу подсказать.
Есть такая программка


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
public class moving_test extends JFrame {
    public moving_test(){
        myPanel np=new myPanel();
        Container cont=getContentPane();
        cont.add(np);
        this.setTitle("Теннис");      
        this.setBounds(100,100,800,600);
        np.l1.setBounds(50, 10, 100, 20);
        np.l2.setBounds(500, 100, 100, 20);
        np.l1.setText("0");
        np.l2.setText("0");
        np.add(np.l1);
        np.add(np.l2);
        np.btnstart.setLabel("Начать игру");
        np.btnstart.setBounds(10, 10, 100, 100);        
        np.btnend.setLabel("Остановить игру");        
        np.btnend.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setLocation(200, 100);
                np.nt.restart();
            }
        });
        np.btnstart.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setLocation(100, 100);
                np.nt.restart();
            }
        });
        np.btnend.setBounds(10, 10, 100, 100);
        np.add(np.btnend);
      //np.btnstart.enable(false);
        np.add(np.btnstart);
        setVisible(true);
        setBackground(Color.LIGHT_GRAY); 
      //np.nt.stop();        
        this.validate(); // обновляем фрейм
    }
    
    class myPanel extends JPanel
    {       
        private int x=785,y=300;    
        private int napr=111;
        public Button btnstart = new Button();
        public Button btnend = new Button();
        public Label l1 = new Label(); 
        public Label l2 = new Label();      
        public Timer nt;
    
        private class myKey implements KeyListener
        {
            public void keyPressed(KeyEvent e)
            {       
                int key_= e.getKeyCode();
                if (key_==KeyEvent.VK_UP)napr=11;
                if (key_==KeyEvent.VK_DOWN)napr=33;         
            }
            public void keyReleased(KeyEvent e){            
 
            }
            public void keyTyped(KeyEvent e){}  
        }
        
        public myPanel()
        {
        addKeyListener(new myKey());
        setFocusable(true);
        
        Timer nt = new Timer(20,new ActionListener()
        {           
            public void actionPerformed(ActionEvent e)          
            {           
                if (napr==11) y-=12;
                if (napr==1) y--;        
                if (napr==33) y+=12;
                if (napr==3) y++;               
                if ((napr==1) && (y<=0)) {
                    napr=3;
                    y=0;
                }
                if ((napr==3) && (y>=480)) {
                    y=480;
                    napr=1;
                }           
                if ((napr==11) && (y<=0)) {
                    y=0;
                    napr=3;
                }       
                if ((napr==33) && (y>=480)) {
                    y=480;
                    napr=1;
                }   
                repaint();
          }
        });
    nt.start();
    }
 
    public void paintComponent(Graphics gr)
    {
        gr.setColor(Color.RED);
        gr.fillRect(x,y,10,80);
        gr.setColor(Color.LIGHT_GRAY);
        if (napr==3) gr.fillRect(x,y-80,10,80); else if (napr==1) gr.fillRect(x,y+80,10,80);
        if (napr==33) gr.fillRect(x,y-80,10,80); else if (napr==11) gr.fillRect(x,y+80,10,80);
      }  
    }  
        
    public static void main(String[] args) {
        moving_test okno = new moving_test();
        okno.setLocation(100, 100);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okno.setResizable(false);
        okno.setVisible(true);  
    }
}
В ней хочу кнопками остановить и заново запустить таймер. Но он не останавливается, точнее как-то неправильно реагирует. Затем не запускается. Предполагаю, что не нужно его было запихивать в конструктор панели. Или все же с ним можно там работать? Т.е. как при нажатии одной кнопки остановить все, при нажатии другой - переинциализировать и запустить. Спасибо.

Добавлено через 2 часа 11 минут
как пользоваться таймером - понятно, интересует особенность именно как пользоваться в данном случае. Почему при стопе нет опроса клавиатуры, но продолжается движение, при старте - не возобновляется опрос
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2015, 21:03
Ответы с готовыми решениями:

Запуск/остановка таймера по нажатию на TSpeedButton
Необходимо сделать так При нажатии на кнопку SpeedButton: • время выводимое компонентом Timer...

Запуск таймера по нажатию кнопки в GUI
Доброго времени уважаемое сообщество! Прошу помочь с таймером, который должен запускаться по...

Запуск таймера на второй форме по нажатию кнопки на первой
Добрый день, столкнулся с проблемой, имеются 2 формы, нужно что бы таймер запускался во второй...

Включение и остановка таймера по нажатию на button
Вообщем есть Button, надо что бы я нажал, запустился таймер, ещё раз нажал эту кнопку -...

2
1405 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,321
Записей в блоге: 1
23.04.2015, 18:43 2
Есть несколько вариантов:
Вариант №1 через логическое поле и стандартный таймер:
прослушивание действия кнопки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class ButonList2 implements ActionListener
{
 
        @Override
        public void actionPerformed(ActionEvent ae) 
        {
            if(stop)
            {
                Pause.setText("Пауза");
            stop = false;
            timer.start();
           
             }
            else
                    
            {
             Pause.setText("Старт");
             stop = true;
            }
            
            
        }
    
}
Для действий по таймеру:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
class TimerTick implements ActionListener 
      {
        int Ttick =0;
        
    
        @Override
        public void actionPerformed(ActionEvent e) 
        {
                   
            
            //Ваши действия по таймеру
           
            
            
            if (stop) 
            {
                timer.stop();
                
            }
        }
        
    }
в коде где инициализируете таймер:
Java
1
2
timer = new Timer(время_в_мс, new TimerTick());
 timer.start();
Вариант №2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 class running implements Runnable
    {
        long delta =0;
 
        @Override
        public void run() 
        {
          long lastTime = System.currentTimeMillis();
          
 
      while(!stop) 
           {
              delta++;//= System.currentTimeMillis() - lastTime; //разница по времени между двумя кадрами
              lastTime = System.currentTimeMillis();
                //ваш код по таймеру относительно дельта, где дельта миллисекунды.
            }
      }
}
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 2
18.05.2015, 22:43  [ТС] 3
Спасибо, буду разбираться. Пока ругается на старт таймера. Identifer expected after this token

Добавлено через 10 минут
не совсем понятно какого класса кнопка Pause. У меня обычные. Но у них нет метода setText
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 22:43

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Запуск и остановка Таймера
Уважаемые форумчане, добрый день! В просторах интернета по вопросу работы ТАЙМЕРА на VBA, я нашел...

Остановка по нажатию кнопки
Подскажите пожалуста. Необходимо чтобы программа выполняла некий код по циклу до тех пор пока...

Запуск\остановка цикла по нажатию клавиши
Всем привет! Вопрос как реализовать запуск и остановку цикла в консольном приложении по нажатию...

Остановка вычислений по нажатию кнопки
В моей программе выполняются процесс вычислений, который блокирует интерфейс пользователя и при...

Остановка цикла по нажатию кнопки
Подскажите, как реализовать остановку цикла (листание картинок), нажав кнопку?

Запуск/остановка таймера при вводе в Edit команд Timer Start/Timer Stop
Суть вот в чём на форме есть таймер который выполняет обратный отсчёт и есть Edit, задача вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.