Как правильно добавить холст в JPanel - PullRequest
0 голосов
/ 07 мая 2019

Мне нужно сделать анимацию с частью, управляемой стрелками. Я создал JPanel, который рисует «фон» просто с помощью timer и repaint (). Затем я пытаюсь добавить холст с ключевым слушателем.

public class MyPanel extends JPanel implements ActionListener{
      MyPanel(){
           ... creating other objects ...
        MyCanvas canv = new MyCanvas();
        this.add(canv);
        Timer timer = new Timer(30, this); 

      }

     ...actionPerformed and other functions for background animation...
 }

 public class MyCanvas extends Canvas implements ActionListener, KeyListener{
      int rX;
      int rY;
      Color color;
      KeyEvent e;
      int code;
      Timer timer;

      MyCanvas() {      
        rX = 400;
        rY = 400;
        color=Color.red;
        this.setSize(1220, 840);

        setFocusable(true);
        setFocusTraversalKeysEnabled(false);

        timer = new Timer(5, this);
        timer.start();
      }

      public void KeyPressed(KeyEvent e){
         code = e.getKeyCode();
      }

      public void paint (Graphics g)
      {
          g.setColor(color);
          g.fillOval(this.rX, this.rY, 30, 30); 
      }

      public void actionPerformed(KeyEvent evt) {
          int keyCode = evt.getKeyCode();
          if(keyCode == KeyEvent.VK_LEFT){
               rX-=2;
      }
         ...and so on...

      public void keyPressed(KeyEvent e) {}
      public void keyReleased(KeyEvent e) {}
      public void keyTyped(KeyEvent e) {}

      public void actionPerformed(ActionEvent e) {
           repaint();
      }
 }

Фоновая анимация работает и движется просто отлично, но холст добавлен в JPanel, он полностью скрывает его. Также управление клавишами вообще не работает. Как это исправить?

...