Я пытаюсь научиться делать пользовательские материалы GUI в Java для группового проекта, над которым я работаю. В прошлом я делал GUI типа пользовательской формы, поэтому я знаю суть того, что я здесь делаю, но пользовательский материал рисования все еще меня смущает.Пользовательский цикл рисования в Swing
Я скопировал этот код из Интернета, и я пытался выяснить, как он работает, но я не понимаю, почему я не могу закодировать метод рисования. В качестве простого теста я пытаюсь сделать программу нарисовать овал на моем курсоре. Он рисует овал на курсоре, но только один раз во время выполнения, а затем ничего не делает.
Как это сделать, чтобы я мог продолжать рисовать вещи? Или есть другой способ, который мне нужно вызвать/использовать методы?
public class BombermanGUI extends JFrame {
public static final int CANVAS_WIDTH = 640;
public static final int CANVAS_HEIGHT = 480;
private DrawCanvas canvas;
public BombermanGUI() {
canvas = new DrawCanvas();
canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
Container cp = getContentPane();
cp.add(canvas);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.pack();
this.setTitle("......");
this.setVisible(true);
}
private class DrawCanvas extends JPanel{
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.BLACK);
int x, y;
x = MouseInfo.getPointerInfo().getLocation().x - this.getLocationOnScreen().x;
y = MouseInfo.getPointerInfo().getLocation().y - this.getLocationOnScreen().y;
g.setColor(Color.YELLOW);
g.drawOval(x, y, 10, 10);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BombermanGUI();
}
});
}
}
Либо добавьте прослушиватель событий и попросите его вызвать метод repaint. прослушиватель движения мыши для отслеживания курсоров мыши, или же некоторые потоки запускают вашу игру и запускают 'repaint' через равные промежутки времени. –
К сожалению, я немного прикрутил код при удалении ненужных битов, исправьте его сейчас – Nathan
Также посмотрите на [TimerBasedAnimation] (http://www.java2s.com/Tutorial/Java/0240__Swing/Timerbasedanimation.htm) для идей. – DavidPostill