2016-04-21 3 views
-1

Счастливое лицо Im using ----) Happyface.gif Этот проект хочет, чтобы я изменил программу Rebound из этой главы, чтобы при нажатии кнопки мыши анимация останавливалась, и когда ее снова щелкнула, анимация возобновляется.
Когда я нажимаю на экран с движущимся смайликом, он не останавливается, когда я нажимаю на него, и не запускаюсь снова, потому что я не мог остановить смайлик от перемещения. Что я делаю неправильно? Вот проблемная область .------) |ReboundPanel Inheritance

private class ReboundMouseListener implements MouseListener { 

    public void mouseClicked(MouseEvent event) { 
     if (timer.isRunning()) 
      timer.stop(); 
     else 
      timer.start(); 
     } 
    } 

    public void mouseEntered(MouseEvent event) {} 
    public void mouseExited(MouseEvent event) {} 
    public void mousePressed(MouseEvent event) {} 
    public void mouseReleased(MouseEvent event) {} 
} 

Вот остальная часть кода:

public class ReboundPanel extends JPanel { 
    private final int WIDTH =300, HEIGHT= 100; 
    private final int DELAY= 20, IMAGE_SIZE=35; 

    private ImageIcon image; 
    private Timer timer; 
    private int x, y, moveX, moveY; 

    //--------------------------------------------------------- 
    // Sets up the panel,including the timer for the animation. 
    //--------------------------------------------------------- 
    public ReboundPanel(){ 
     timer= new Timer(DELAY, new ReboundListener()); 
     image= new ImageIcon("happyFace.gif"); 

     x=0; 
     y=40; 
     moveX=moveY=3; 

     setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
     setBackground(Color.black); 
     timer.start(); 
    } 

    //--------------------------------------------------------- 
    // Draws the image in the current location. 
    //--------------------------------------------------------- 
    public void paintComponent(Graphics page) 
    { 
     super.paintComponent(page); 
     image.paintIcon(this, page, x, y); 
    } 

    //********************************************************* 
    // Represents the action listener for the timer. 
    //********************************************************* 
    private class ReboundListener implements ActionListener 
    { 
     //-------------------------------------------------------- 
     // Updates the position of the image and possibly the direction 
     // of movement whenever the timer fires an action event. 
     //-------------------------------------------------------- 
     public void actionPerformed(ActionEvent event) 
     { 
      x += moveX; 
      y += moveY; 

      if (x <=0 || x >= WIDTH-IMAGE_SIZE) 
       moveX =moveX * -1; 

      if (y <=0 || y >= HEIGHT-IMAGE_SIZE) 
       moveY = moveY * -1; 

      repaint();  
     } 
    } 

    private class ReboundMouseListener implements MouseListener { 
     //-------------------------------------------------------------- 
     // Stops or starts the timer (and therefore the animation) 
     // when the mouse button is clicked. 
     //-------------------------------------------------------------- 
     public void mouseClicked(MouseEvent event) { 
      if (timer.isRunning()) 
       timer.stop(); 
      else 
       timer.start(); 
     } 

     //-------------------------------------------------------------- 
     // Provide empty definitions for unused event methods. 
     //-------------------------------------------------------------- 
     public void mouseEntered(MouseEvent event) {} 
     public void mouseExited(MouseEvent event) {} 
     public void mousePressed(MouseEvent event) {} 
     public void mouseReleased(MouseEvent event) {} 
    } 
} 

public class Rebound { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("Rebound"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new ReboundPanel()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+1

Если вы не можете получить ваш программа, чтобы начать, как вы можете ее остановить? Что именно вы имеете в виду: «вы не можете ни начинать, ни останавливать программу»? Пожалуйста, будьте конкретны в том, какие шаги вы предпримете и где это не удается с какой именно ошибкой. Измените свой вопрос по мере необходимости. – planetmaker

+0

Когда я нажимаю на экран с движущимся смайликом. Он не останавливается, когда я нажимаю на него и не запускаюсь снова, потому что я не мог остановить смайлик от перемещения. –

ответ

2

Похоже, вы упускаете свои addMouseListener() звонки:

public ReboundPanel() { 
    // Other initializations ... 

    addMouseListener(new ReboundMouseListener()); // <-- add 

    timer.start(); 
} 
+0

Когда я добавляю код, он говорит об этом: Исключение из потока «main» java.lang.Error: Неразрешенная проблема компиляции: \t ReboundMouseListener не может быть разрешен к типу –

+0

Я думаю, что ваш 'ReboundMouseListener' был внутри вашего класса ReboundListener и был случайно удален во время форматирования. Сделайте так же «несчастный случай» с вашим кодом, и вам нужно найти класс «ReboundMouseListener». – AJNeufeld

+0

Спасибо за помощь, она исправила проблему. Я ценю это. –