我正在尝试创建处理的迷你版本。
我创建了JPanel
的子类,并尝试将Graphics
的{{1}}存储在变量中,并创建了大量的函数来呈现所有内容。
是否有一种方法可以创建无需处理库就可以像paintComponent()
一样工作的函数?这是我的rect(0,0,100,100);
子类:
JPanel
答案 0 :(得分:0)
我知道您现在要做什么。让您的函数接受一个Graphics
对象。
例如,
public void ellipse(Graphics g, int x, int y, int width, int height) {
g.fillOval(x, y, width, height);
}
然后在绘画组件中,调用:
public void paintComponent(Graphics g){
Graphics graphics = g;
ellipse(graphics, x, y, w, h);
}
答案 1 :(得分:0)
Processing是开源的,因此您可以确切地了解Processing如何here。默认情况下,Processing建立在Swing和AWT的基础上,因此您基本上只是在尝试重新创建它们的工作。
请注意,它们不会直接扩展JPanel。相反,他们使用BufferedImage
作为屏幕外缓冲区。处理将绘制到BufferedImage
(具有自己的Graphics2D
),然后将图像绘制到屏幕上。
如果我是你,那正是我要采取的方法。这样一来,您不必担心Graphics2D
仅在paintComponent()
函数中才有效,并且不必在每次draw()
函数执行时都重做所有设置。叫。
尝试使用“ java2d屏幕外缓冲区”之类的内容进行搜索,以获得大量结果,包括this Stack Overflow帖子。
退后一步,我想问自己为什么要这么做。如果仅仅是为了挑战如何理解像Processing这样的系统是如何实现的,那就太好了。但是否则,如果您发现自己尝试重新创建已经完成的内容,则通常应该只使用已经起作用的内容。