在Java中创建一个在paintComponent外部绘制的函数

时间:2018-08-06 15:12:03

标签: java graphics processing

我正在尝试创建处理的迷你版本。

我创建了JPanel的子类,并尝试将Graphics的{​​{1}}存储在变量中,并创建了大量的函数来呈现所有内容。

是否有一种方法可以创建无需处理库就可以像paintComponent()一样工作的函数?这是我的rect(0,0,100,100);子类:

JPanel

2 个答案:

答案 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这样的系统是如何实现的,那就太好了。但是否则,如果您发现自己尝试重新创建已经完成的内容,则通常应该只使用已经起作用的内容。