Запуск и остановка таймера по нажатию кнопки - Java
Формулировка задачи:
Добрый день.
Прошу подсказать.
Есть такая программка
В ней хочу кнопками остановить и заново запустить таймер. Но он не останавливается, точнее как-то неправильно реагирует. Затем не запускается. Предполагаю, что не нужно его было запихивать в конструктор панели. Или все же с ним можно там работать? Т.е. как при нажатии одной кнопки остановить все, при нажатии другой - переинциализировать и запустить. Спасибо.
Листинг программы
- 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);
- }
- }
как пользоваться таймером - понятно, интересует особенность именно как пользоваться в данном случае. Почему при стопе нет опроса клавиатуры, но продолжается движение, при старте - не возобновляется опрос
Решение задачи: «Запуск и остановка таймера по нажатию кнопки»
textual
Листинг программы
- class running implements Runnable
- {
- long delta =0;
- @Override
- public void run()
- {
- long lastTime = System.currentTimeMillis();
- while(!stop)
- {
- delta++;//= System.currentTimeMillis() - lastTime; //разница по времени между двумя кадрами
- lastTime = System.currentTimeMillis();
- //ваш код по таймеру относительно дельта, где дельта миллисекунды.
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д