在clearRect()和repaint()之后无法在JPanel上绘制

时间:2015-05-10 04:12:23

标签: java swing jframe jpanel paint

我有一个允许用户绘画的程序。但是当用户单击调用clearRect()和repaint()的clear按钮时,用户无法再在同一面板上绘画。我遇到的另一个问题是,当用户单击保存或打开按钮(打开文件浏览器窗口)时,如果用户按下取消,面板会将文件窗口绘制到面板上。我该如何解决这些问题?

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 and Graphics

BufferedImage img = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();

1 个答案:

答案 0 :(得分:2)

我怀疑Graphics上下文g在您的ActionListener中无效,可能是由于使用getGraphics()不恰当。相反,让您的ActionListener更新视图类中的字段,并使用更新的值修改Graphics中的paintComponent()上下文。

在这个完整的code demo on IDEONE中,actionPerformed()buttonPanel的各种实现更新了DrawingArea中的属性。然后paintComponent()DrawingArea的实现知道在每个时间内调用的时间。

image