2013-06-02 4 views
0

У меня есть класс под названием «DisplayPanel» (который расширяет JPanel), и я рисую квадрат, который исходит из класса «Квадрат» (который расширяет JComponent). Как перенести прямоугольник в JPanel с помощью клавиш?Переместить прямоугольник в JPanel с помощью клавиш

Квадрат класс имеет обычный метод окраски:

public void paintComponent(Graphics g) { 
    Dimension dimension = getSize(); 
    super.paintComponent(g); 
    Graphics2D graphics2D = (Graphics2D) g; 
    g.setColor(Color.black); 
    graphics2D.fill(squarishThing); 
} 

и «squarishThing» является нормальным прямоугольник:

Rectangle squarishThing = new Rectangle (0, 0, 50, 50); 

Дело в отличие от «игровых библиотек», пытаясь сделать такая вещь «вручную» довольно запутанна. Я не знаю, где идет «цикл while». Я попытался поместить KeyListener в DisplayPanel, и я ошибся, чтобы обновить прямоугольник. Нет цикла, и я не могу перерисовать прямоугольник, потому что метод paintComponent принимает этот неприятный аргумент. OBS: каждый раз, когда я пытаюсь вставить цикл, программное обеспечение резко падает, поэтому я отказался от этого.

Что можно сделать, чтобы перекрасить объект в соответствии с вводом?

+1

Посмотрите на использование привязок клавиш. Например, посмотрите [этот ответ] (http://stackoverflow.com/a/6887354/522444). –

+1

Это для игры? Если это так, вам понадобится цикл. И что вы имеете в виду «резко падает»? Петли не являются динамитами. – Nikki

+0

Таймер Swing может работать для простой игровой петли. –

ответ

2

не может перерисовать прямоугольник, потому что метод paintComponent принимает этот неприятный аргумент. Никогда не называйте paintComponent, вместо этого используйте repaint().

Использование KeyBindings просто обновляет «squarishThing» до соответствующего значения, а затем вызывает repaint().

Смежные вопросы