【问题标题】:How to create a Graphics2D instance?如何创建 Graphics2D 实例?
【发布时间】:2013-05-08 02:46:38
【问题描述】:

Java SE 7 中获取实例以绘制几个点进行调试的最简单方法是什么?桌面环境。

【问题讨论】:

    标签: java awt graphics2d


    【解决方案1】:

    你可以使用BufferedImage:

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D graphics2D = image.createGraphics();
    

    【讨论】:

    • 我喜欢这个答案 - 如何显示图像?
    • 在 JLabel 显示的 ImageIcon 中。 1+
    • 很难选择接受哪个答案,我选择这个是因为它的超简单性和超便携性。它将在服务器端和桌面上工作。这种方法的唯一缺陷是它不适合桌面,因为您无法捕获可用于调试的鼠标事件。但这不是我要求的。感谢您的精彩回答!
    • @randomstring,酷!这是我在 stackoverflow 上第一个接受的答案(我最近才加入)。谢谢:)
    • @BLuFeNiX 我知道 - 你也赢得了一些激烈的竞争!感谢您的帮助:)
    【解决方案2】:

    最简单和最安全的方法是使用将Graphics 引用转换为paintComponent 并根据需要进行转换。这样Object就被正确初始化了。可以根据需要将此引用传递给其他自定义绘制方法。

    @Override
    public void paintComponent(Graphics g) {
       super.paintComponent(g);
       Graphics2D g2d = (Graphics2D)g;
       ...
    }
    

    【讨论】:

    • 在下面尝试了@greedybuddha 的类似且稍微更完整的解决方案,但我的程序在创建后立即退出。
    • @randomstring:那么你做错了什么。什么? - 我们不知道,因为您不显示代码。 1+
    • 谢谢,我需要将它添加到 JFrame 中。我应该在我的问题中更清楚我是多少新手:)
    【解决方案3】:

    您可能应该只创建一个 JPanel 并在其上绘画。

    public class MyPanel extends JPanel {
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            .... // my painting
        }
    }
    

    【讨论】:

    • 我的程序在创建 jpanel 后简单地终止
    • @randomstring:你是把它放在 JFrame 中并显示 JFrame 吗?你有没有学习过任何 Swing 教程?
    • @HovercraftFullOfEels 我对 90 年代教程犹豫不决的一个原因是因为我开始使用 Java SE 7,并且我想知道创建点的最现代方法。我意识到存在向后兼容性,所以旧的 casty 方法会起作用,但如果在 java se 7 中有现代替代方案,我会全神贯注于任何教程链接
    • @HovercraftFullOfEels 缺少 java se 7 特定教程,有 API 文档和 Oracle 的一些最新教程。
    • @greedybuddha 感谢您的回答。很难在您的和缓冲图像之间进行选择。我选择了另一个,因为它确实是最简单的,并且在服务器端也可以工作,并且可以帮助人们避免所有的摇摆陷阱。在我的情况下,我需要捕获鼠标事件,因此我最终将使用类似于您的答案的 JComponent,但我觉得接受另一个答案是公平的,因为我没有在问题中提到鼠标事件的需要,而是专注于最简单的可能的方式。
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多