java - Java图形编程绘制图像错误

标签 java swing user-interface compiler-errors scope

您好,我在将图像绘制到框架时遇到错误。我不确定这里出了什么问题。

我在这里得到以下错误。

Java: 77: cannot find symbol
symbol: variable image
location: class DrawComponent
g.drawImage(image, 0, 0, null);


class DrawComponent extends JComponent {
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        // draw a circle with the same center
        double centerX = 250;
        double centerY = 180;
        double radius = 20;

        Ellipse2D circle = new Ellipse2D.Double();
        circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY + radius);
        g2.setPaint(Color.RED);
        g2.fill(circle);
        g2.draw(circle);

        String filename = "SydneyOperaHouse.jpeg";
        try{
            Image image = ImageIO.read(new File(filename));
        }catch(IOException ex){
            // Handle Exeption
        }

        g.drawImage(image, 0, 0, null);

    }
}

任何帮助将是巨大的:)

最佳答案

几点。

  • 解决属性范围的问题。 应当将image属性传递(或加载到)构造函数中,并存储为paint方法可见的类属性。请勿尝试使用此方法加载图像(或执行其他可能长时间运行的任务)。
  • 在部署时,BG的图像通常将是嵌入式资源,因此可以通过URL访问它。
  • JComponentImageObserver,因此g.drawImage(image, 0, 0, null);应该是
    g.drawImage(image, 0, 0, this);
  • 我怀疑在0x0处绘制的图像应该在绘制红色椭圆之前(之前完成),否则它将绘制在其上方。

  • 这是一个基于悉尼图像的示例(不,不是血腥的歌剧院-挑剔,挑剔..)。
    import java.awt.*;
    import java.awt.geom.Ellipse2D;
    import javax.swing.*;
    import javax.imageio.ImageIO;
    import java.net.URL;
    
    public class DrawComponent extends JComponent {
    
        private Image image;
    
        DrawComponent(Image image) {
            this.image = image;
            Dimension d = new Dimension(image.getWidth(this),image.getHeight(this));
            this.setPreferredSize(d);
        }
        public void paintComponent(Graphics g) {
            // always call super first, to get borders etc.
            super.paintComponent(g);
    
            Graphics2D g2 = (Graphics2D) g;
    
            // paint the BG
            g.drawImage(image, 0, 0, this);
    
            // draw a circle with the same center
            double centerX = 250;
            double centerY = 180;
            double radius = 20;
    
            Ellipse2D circle = new Ellipse2D.Double();
            circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY + radius);
            g2.setPaint(Color.RED);
            g2.fill(circle);
            g2.draw(circle);
        }
    
        public static void main(String[] args) throws Exception {
            String s = "http://pscode.org/media/citymorn1.jpg";
            final Image image = ImageIO.read(new URL(s));
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    JComponent gui = new DrawComponent(image);
                    JOptionPane.showMessageDialog(null, gui);
                }
            };
            SwingUtilities.invokeLater(r);
        }
    }
    

    关于java - Java图形编程绘制图像错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893416/

    相关文章:

    java - 无法在 eclipse (java) 中创建 ServerSocket

    java - Swing 组布局 : Resizing and limiting component sizes

    java - 如何使 JTable 中的单元格为空,直到单击为止?

    javascript - jquery navigate + highlight <li> key.code pressed 上的元素

    java - Java中使用递归方法计算字符串中的特定字符

    java - 如果计算机关闭,由 java 应用程序创建的 XML 文件的内容将消失

    java - 使用以下代码输出错误

    html - 如何将图像放入 Bootstrap 3 div?

    java - 允许 jTextField 为空?

    java - MigLayout 中同一列的单元格具有不同的独立宽度?