通过在arraylist中保存鼠标点来制作类似绘画的应用程序。我的想法是有一个"积分" arraylist与所有以前绘制的东西,以及" temp" arraylist获取并修改用户刚刚输入的当前画笔描边。这是必要的,因为用户可以更改颜色和大小,所以我的想法是根据已按下的按钮修改当前画笔笔划,然后将该画笔笔划添加到图片的其余部分。我在StackOverflow周围搜索并发现了一些代码但是无法按照我想要的方式工作(假设我找到了正确的代码)。
@Override
public void paintComponent(Graphics g1) {
super.paintComponent(g1);
final Graphics2D g = (Graphics2D)g1.create();
try {
g.setColor(brushColor);
for (Point point : tempArrayList){
g.fillOval(point.x, point.y, brushSize, brushSize);
}
} finally {
g.dispose();
}
问题是我需要为下一个画笔笔划清除tempArrayList,当我们改变颜色/大小时我可以这样做,但是它会删除之前的画笔笔划。我开始认为我甚至不需要"积分"如上所述的arraylist因为我希望g1图形能够保存g图形所创建的内容。
我想我只需要弄清楚如何将g图形添加到g1
答案 0 :(得分:0)
绘图由Swing API控制,期望每当调用paintComponent
时,您将重新绘制组件的整个状态(由于某些系统事件,组件的一部分可能已被损坏)所以简短的回答是,不,你不能......但是......
改为绘制BufferedImage
并在调用BufferedImage
时绘制paintComponent
建立一系列“可绘制”的对象,其中包含有关绘制内容以及绘制方式的信息,包括画笔描边,笔触颜色和填充颜色。
当调用List
方法时,这些会被添加到某种paintComponent
和“画”
答案 1 :(得分:0)
从以下位置查看Custom Painting Approaches作为绘画的例子:
示例显示了如何绘制不同颜色的矩形。