java - 在clearRect()和repaint()之后无法在JPanel上绘画

标签 java swing jframe jpanel paint

我有一个程序可以让用户绘画。但是,当用户单击调用clearRect() 和repaint() 的清除按钮时,用户无法再在同一面板上继续绘画。我遇到的另一个问题是,当用户单击“保存”或“打开”按钮(打开文件资源管理器窗口)时,如果用户按“取消”,面板会将文件窗口绘制到面板上。我将如何解决这些问题?

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 更新 View 类中的字段,并使用更新的值修改 paintComponent() 中的 Graphics 上下文。

在此完整的 examplebuttonPanelactionPerformed() 的各种实现更新 DrawingArea 中的属性。然后,DrawingAreapaintComponent() 的实现就知道每次调用它时要绘制什么内容。

image

关于java - 在clearRect()和repaint()之后无法在JPanel上绘画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30147632/

相关文章:

java - 在基于网格的碰撞检测中避免重复?

java - 给定列表中的百万数字。如何以最小的时间复杂度将每个元素乘以一个常数

java - log4J 与 java applet 和 java 插件2

java - 如何将输入数据添加到SQL值中?

java - Spring Boot Async ResultSet 已关闭

java - 更改 JRadioButton 中 ImageIcon 的大小

java - 重新验证和重绘不起作用

用于选择图像的 Java Swing 图像缩略图 View

java - 如何使用java在jframe中退出前调用方法

java - 在swing中的JMenu中添加图标和文本