据我所知,在JFrame中绘图的工作原理如下:
paint(Graphics g)
方法add(panel)
它到你的JFrame 是否可以
答案 0 :(得分:2)
是的,您需要使用
repaint()
每次画完新内容后,都会在屏幕上显示修改内容。在重新绘制时,整个屏幕会重新绘制,因此您需要确保再次绘制想要保留的所有内容。
关于保留以前的内容,此question可能会帮助您。
答案 1 :(得分:1)
AuroMetal向我指出this tutorial并且我提取了JPanel
不知道,它已经绘制了什么,所以你必须保持ArrayList
所有要绘制的东西并循环它通过每repaint()
:
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Canvas extends JPanel implements LinePrinter {
private static final long serialVersionUID = 1L;
private ArrayList<Line> lines = new ArrayList<Line>();
public Canvas(String title) {
// Just generating a JFrame to display this JPanel
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 425);
frame.setVisible(true);
frame.add(this);
}
@Override
public void addLine(Line line) {
lines.add(line);
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (Line line : lines) {
g.drawLine(line.A.x, line.A.y, line.B.x, line.B.y);
}
}
}
我的自定义 Line
类
public class Line {
public final Point A, B;
public Line(Point A, Point B) {
this.A = A;
this.B = B;
}
}
我的自定义 Point
类是
public class Point {
public final int x;
public final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}