事件发生后在 JFrame 中绘制某些内容?
Paint something in JFrame after an event occurred?
如何在 java 中的事件处理程序中在框架中绘制内容?因为我想编写游戏 Breakout,所以我需要在事件处理程序中重新绘制整个屏幕。
public void mouseMoved(MouseEvent e, Graphics g)
{
// if mouse was moved then rearrange paddle
double x = e.getX() - paddle_width;
double y = e.getY() - paddle_height;
this.repaint();
g.setColor(Color.BLACK);
g.fillRect(x, y, paddle_width, paddle_height);
}
您可以创建扩展 JPanel 的绘图面板并覆盖 paintComponent。
然后你就可以有一个模型了(我说的模型是指你想画什么的数据)
然后您可以添加 MouseMotionListener 来操纵您的模型。
将模型更改通知绘图面板,以便它根据模型更改更新绘画。
下面的代码应该可以帮助你进步。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Demo extends JFrame {
public static void main(String[] args) {
Demo frame = new Demo();
frame.setVisible(true);
}
public Demo() throws HeadlessException {
super();
init();
}
private void init() {
Point start = new Point(0, 0);
Paddle paddle = new Paddle(start, 20, 20);
DrawingPanel drawingPanel = new DrawingPanel(paddle);
setContentPane(drawingPanel);
pack();
}
class DrawingPanel extends JPanel implements MouseMotionListener {
private Paddle paddle;
public DrawingPanel(Paddle paddle) {
super();
this.paddle = paddle;
this.addMouseMotionListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(paddle.point.x, paddle.point.y, paddle.width, paddle.height);
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
paddle.point = new Point(e.getX(), e.getY());
repaint();
}
}
class Paddle {
Point point;
Integer height, width;
public Paddle(Point point, Integer height, Integer width) {
super();
this.point = point;
this.height = height;
this.width = width;
}
}
}
如何在 java 中的事件处理程序中在框架中绘制内容?因为我想编写游戏 Breakout,所以我需要在事件处理程序中重新绘制整个屏幕。
public void mouseMoved(MouseEvent e, Graphics g)
{
// if mouse was moved then rearrange paddle
double x = e.getX() - paddle_width;
double y = e.getY() - paddle_height;
this.repaint();
g.setColor(Color.BLACK);
g.fillRect(x, y, paddle_width, paddle_height);
}
您可以创建扩展 JPanel 的绘图面板并覆盖 paintComponent。
然后你就可以有一个模型了(我说的模型是指你想画什么的数据)
然后您可以添加 MouseMotionListener 来操纵您的模型。
将模型更改通知绘图面板,以便它根据模型更改更新绘画。
下面的代码应该可以帮助你进步。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Demo extends JFrame {
public static void main(String[] args) {
Demo frame = new Demo();
frame.setVisible(true);
}
public Demo() throws HeadlessException {
super();
init();
}
private void init() {
Point start = new Point(0, 0);
Paddle paddle = new Paddle(start, 20, 20);
DrawingPanel drawingPanel = new DrawingPanel(paddle);
setContentPane(drawingPanel);
pack();
}
class DrawingPanel extends JPanel implements MouseMotionListener {
private Paddle paddle;
public DrawingPanel(Paddle paddle) {
super();
this.paddle = paddle;
this.addMouseMotionListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(paddle.point.x, paddle.point.y, paddle.width, paddle.height);
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
paddle.point = new Point(e.getX(), e.getY());
repaint();
}
}
class Paddle {
Point point;
Integer height, width;
public Paddle(Point point, Integer height, Integer width) {
super();
this.point = point;
this.height = height;
this.width = width;
}
}
}