我试过这个,但它不起作用。
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
?
如果你想使用 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);
}
}
带有一些绘图的完整示例:
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);
}
}