java - 如何在 JFrame 的 paint() 函数之外绘制图形

标签 java swing graphics

我希望能够将 Image 绘制到 JFrame 上,但只要我想(不在 JFrame.paint 方法中) .

对于我正在处理的项目,我有一个 class Bullseye extends BufferedImage,并试图将它放到一个 JFrame 上:

class DrawingFrame extends JFrame {
    public void drawImage(Image img, int x, int y) {
        getGraphics().drawImage(img,x,y,null);
        repaint();
    }
}

class Main {
    public static void main(String[] args) {
        DrawingFrame frame = new DrawingFrame();
        Bullseye bullseye = new Bullseye(20,20); //width,height

        // later
        frame.setVisible(true);
        frame.drawImage(bullseye,10,20);
        frame.drawImage(bullseye,20,20);
        frame.drawImage(bullseye,30,20);
    }
}

但是,没有任何显示。经过一些研究,显然这不起作用,因为当我 repaint() 时,对 graphics 对象的更改被清除。

我该怎么做?这是正确的方法吗?

最佳答案

我认为你把问题倒过来了。在 Swing 中,所有绘图操作都应在 paint() 方法中完成。

你可以做的是将你想要绘制的图像作为属性存储在你的类中,然后在你的 pain 方法中,将图像绘制到你想要的任何地方。例如:

class MyFrame extends JFrame {

    Image image;

    public void paint(Graphics g) {
        super.paint(g);
        if (image != null) {
            g.drawImage(image, /* ... */);
        }
    }

    public void setImage(Image image) {
        this.image = image;
        repaint();
    }

}

在你的其他类(class):

myFrame.setImage(myImage);

关于java - 如何在 JFrame 的 paint() 函数之外绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720331/

相关文章:

java - jTable中两列数据的乘法

java - jcombobox 作为单元格编辑器 java.awt.IllegalComponentStateException : component must be showing on the screen to determine its location

java - 如何通过文件路径绘制图像

java - 如何在 Spring XML 配置中设置 LocalDateTime

java - 如何在本地主机上运行 JSP 网站?需要搭建什么环境?

java - 将多个 JPanel 扩展组件添加到 JFrame

graphics - 调整颜色亮度的算法

java - 我应该在 Android 应用程序中使用哪种图像格式?

java - 在Java中显式引用方法参数

java - 如何通过 gradle 系统属性 JUnit 5 测试?