如何在 AWT 中将图像添加到框架中?

问题描述 投票:0回答:2

我试过这个,但它不起作用。

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.Panel;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Gfx
{
  public static void main(String[] args)
  {
    Frame f = new Frame ("Gfx");
    f.addWindowListener (new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          f.dispose (); }});
    Panel p = new Panel ();
    f.add(p);
    BufferedImage image = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
    p.add(image);
    f.pack();
    f.setVisible (true);
  }
}

错误是:

Gfx.java:21: error: no suitable method found for add(BufferedImage)
    p.add(image);
     ^
    method Component.add(PopupMenu) is not applicable
      (argument mismatch; BufferedImage cannot be converted to PopupMenu)
    method Container.add(Component) is not applicable
      (argument mismatch; BufferedImage cannot be converted to Component)

BufferedImage
不是
Component
。如何将其转换为
Component

java awt
2个回答
1
投票

如果你想使用 AWT 绘图,你可以使用

Canvas
。在 Java Swing 中,您创建一个绘图
JPanel
.

我修改了您的代码以创建以下 GUI:

我减小了图像大小,因此 GUI 更适合答案。

这是完整的可运行代码。

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

public class Gfx {
    public static void main(String[] args) {
        Frame f = new Frame("Gfx");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                f.dispose();
            }
        });

        Canvas canvas = new Canvas() {
            private static final long serialVersionUID = 1L;

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }

            @Override
            public void paint(Graphics g) {
                super.paint(g);
                BufferedImage image = new BufferedImage(200, 200,
                        BufferedImage.TYPE_INT_ARGB);
                g.drawImage(image, 0, 0, this);
            }
        };

        f.add(canvas);
        f.pack();
        f.setVisible(true);
    }
}

0
投票

带有一些绘图的完整示例:

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

public class Gfx
{
  static final int width = 800;
  static final int height = 600;

  static Frame frame (String title)
  {
    Frame frame = new Frame (title);
    frame.addWindowListener (new WindowAdapter ()
      {
        @Override
        public void windowClosing (WindowEvent ev) { frame.dispose (); }
      });
    return frame;
  }

  static BufferedImage image ()
  {
    BufferedImage image = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics graphics = image.getGraphics();
    graphics.setColor (Color.RED);
    graphics.fillPolygon (new int[] {width, 0, 0}, new int[] {height/2, 0, height}, 3);
    graphics.dispose ();
    return image;
  }

  static Canvas canvas (Image image)
  {
    Canvas canvas = new Canvas ()
      {
        @Override
        public Dimension getPreferredSize () {
          return new Dimension (width, height); }
        @Override
        public void paint (Graphics graphics)
        {
          super.paint (graphics);
          graphics.drawImage (image, 0, 0, this); // this?
        }
      };
    return canvas;
  }

  public static void main (String[] args)
  {
    Frame frame = frame ("Gfx");
    Image image = image ();
    Canvas canvas = canvas (image);
    frame.add (canvas);
    frame.pack ();
    frame.setVisible (true);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.