Как перекрасить JPanel для обновления положения графического объекта? - PullRequest
0 голосов
/ 25 апреля 2019

Я тестирую KeyListener для проекта Tetris, над которым я работаю. Моя главная проблема заключается в том, что я не могу заставить JPanel перекрашивать, чтобы обновить положение прямоугольника после нажатия клавиши. JPanel встроен в JFrame, поэтому я не уверен, обновлять ли панель или рамку. Вот код:

public class mainBoardTest extends JPanel implements KeyListener { 
    private Rectangle rect;
    public mainBoardTest() {
    setPreferredSize(new Dimension(400, 800));
    setBackground(Color.BLACK);
}


public void init() {
    this.addKeyListener(this);
}

public void paint(Graphics g) {
    //super.paintComponent(g);
    rect = new Rectangle(0,0,50,50);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.RED);
    g2.fill(rect);
}

@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        rect.setLocation(rect.x + 2, rect.y);
    }
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
        rect.setLocation(rect.x - 2, rect.y);
    }
    else if (e.getKeyCode() == KeyEvent.VK_UP) {
        rect.setLocation(rect.x, rect.y - 2);
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
        rect.setLocation(rect.x, rect.y + 2);
    }
    repaint(); //does not repaint
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

В вашем методе paint () вы создаете новый Rectangle при каждом вызове с местоположением по умолчанию.Это заменяет все, что вы изменили в обработчике клавиш.

0 голосов
/ 25 апреля 2019

Это что, весь код связан с панелью и рамкой?если да, то похоже, что пропущено несколько вещей.

Уже есть ответ, связанный с перемещением объекта при нажатии клавиш, это ссылка

как переместить объект вJPanel с помощью клавиш со стрелками

возможно, это может помочь вам

...