用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);
}
}
这不起作用,我不知道如何让任何东西出现。
答案 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
),并将其添加到框架中。
是系统显示您的框架时调用此面板的paint
和paintComponent
方法。
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);
}