用Java绘制最简单的方法是什么?

用Java绘制最简单的方法是什么?

import java.awt.*; import javax.swing.*; public class Canvas { private JFrame frame; private Graphics2D graphic; private JPanel canvas; public Canvas() { frame = new JFrame("A title"); canvas = new JPanel(); frame.setContentPane(canvas); frame.pack(); frame.setVisible(true); } public void paint(Graphics g){ BufferedImage offImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Grapics2D g2 = offImg.createGraphics(); g2.setColor(new Color(255,0,0)); g2.fillRect(10,10,200,50); } } 

这不起作用,我不知道如何让任何东西出现。

最简单的方法:

 public class Canvas extends JPanel { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; // painting code goes here. } } 

您只需要扩展JPanel并覆盖面板的paintComponent方法。

我想重申一下,你应该重写paint方法。

这是一个非常简约的例子。

 public static void main(String[] args) { JFrame f = new JFrame(); JPanel p = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(0, 0, 100, 100); } }; f.add(p); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } 
 // No. 1 // Create a graphics context on the buffered image Graphics2D g2d = bimage.createGraphics(); // Draw on the buffered image g2d.setColor(Color.red); g2d.fill(new Ellipse2D.Float(0, 0, 200, 100)); g2d.dispose(); // No.2 // In case the buffered image supports transparency g2d = bimage.createGraphics(); // Transparency is created on all the filled pixels Color transparent = new Color(0, 0, 0, 0); g2d.setColor(transparent); g2d.setComposite(AlphaComposite.Src); g2d.fill(new Rectangle2D.Float(20, 20, 100, 20)); g2d.dispose(); 

jjnguy已经写了如何正确地做到这一点……但是为什么它在你的例子中不起作用:

 import java.awt.*; import javax.swing.*; public class Canvas 

这里有一个与Swing或AWT无关的类。 (顺便说一下,您可能希望选择其他名称以避免与java.awt.Canvas混淆。)

 { private JFrame frame; private Graphics2D graphic; private JPanel canvas; public Canvas() { frame = new JFrame("A title"); canvas = new JPanel(); frame.setContentPane(canvas); 

在这里,您将创建一个新的JPanel(用于混淆也称为canvas ),并将其添加到框架中。 是系统显示框架时调用此面板的paintpaintComponent方法。

  frame.pack(); frame.setVisible(true); } public void paint(Graphics g){ BufferedImage offImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Grapics2D g2 = offImg.createGraphics(); g2.setColor(new Color(255,0,0)); g2.fillRect(10,10,200,50); } 

这个paint方法根本就没用过(因为它不是组件的一部分),如果它被调用,那么你只是绘制到一些BufferedImage而不是屏幕。

 } 

要在paint(Graphics g)中显示某些内容,您需要在该Graphics上调用绘图方法(如fillRect)。 您正在创建一个位图,然后绘制到位图,而不是屏幕。

 public void paint(Graphics g){ g.setColor(new Color(255,0,0)); g.fillRect(10,10,200,50); }