在 clearRect() 和 repaint() 之后无法在 JPanel 上绘画
Can't paint on JPanel after clearRect() and repaint()
我有一个程序可以让用户作画。但是当用户单击调用 clearRect() 和 repaint() 的清除按钮时,用户不能再在同一面板上继续绘画。我遇到的另一个问题是,当用户单击保存或打开按钮(打开文件资源管理器 window)时,如果用户按下取消,面板会将文件 window 绘制到面板上。我将如何解决这些问题?
public void paintComponent(Graphics g){
super.paintComponents(g);
g.fillOval(myX - radius, myY - radius, 2 * radius, 2 * radius);
if(img != null)
g.drawImage(img, 0, 0, null);
}
以下部分在 actionPerformed 方法中
if(source == clear){
g.setBackground(Color.WHITE);
g.clearRect(0, 0, getWidth(), getHeight());
repaint();
}
缓冲图像和图形
BufferedImage img = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
我怀疑 Graphics
上下文 g
在您的 ActionListener
中无效,可能是因为 getGraphics()
使用不当。相反,让您的 ActionListener
更新视图中的字段 class 并使用更新后的值修改 paintComponent()
中的 Graphics
上下文。
在这个完整的example中,buttonPanel
中actionPerformed()
的各种实现更新了DrawingArea
中的属性。 DrawingArea
中的 paintComponent()
的实现然后知道在每次 调用时绘制什么 。
我有一个程序可以让用户作画。但是当用户单击调用 clearRect() 和 repaint() 的清除按钮时,用户不能再在同一面板上继续绘画。我遇到的另一个问题是,当用户单击保存或打开按钮(打开文件资源管理器 window)时,如果用户按下取消,面板会将文件 window 绘制到面板上。我将如何解决这些问题?
public void paintComponent(Graphics g){
super.paintComponents(g);
g.fillOval(myX - radius, myY - radius, 2 * radius, 2 * radius);
if(img != null)
g.drawImage(img, 0, 0, null);
}
以下部分在 actionPerformed 方法中
if(source == clear){
g.setBackground(Color.WHITE);
g.clearRect(0, 0, getWidth(), getHeight());
repaint();
}
缓冲图像和图形
BufferedImage img = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
我怀疑 Graphics
上下文 g
在您的 ActionListener
中无效,可能是因为 getGraphics()
使用不当。相反,让您的 ActionListener
更新视图中的字段 class 并使用更新后的值修改 paintComponent()
中的 Graphics
上下文。
在这个完整的example中,buttonPanel
中actionPerformed()
的各种实现更新了DrawingArea
中的属性。 DrawingArea
中的 paintComponent()
的实现然后知道在每次 调用时绘制什么 。