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

时间:2011-03-14 19:51:13

标签: java swing paint

用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);
    }
}

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

4 个答案:

答案 0 :(得分:6)

最简单的方法:

public class Canvas extends JPanel {

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

您只需要展开{​​{1}}并覆盖面板的JPanel方法。

我想重申您应该覆盖paintComponent方法。

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

paint

答案 1 :(得分:0)

// 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();

答案 2 :(得分:0)

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而不是屏幕。

}

答案 3 :(得分:-1)

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

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