所以,我有一个名为MainClass的类,其中扩展了Canvas。我试图让我们说在Canvas上绘制一个填充的矩形而不覆盖paint方法。有没有办法做到这一点,或者我必须覆盖绘画方法,并把我想要的所有画在那里?
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
public class MainClass extends Canvas {
MainClass()
{
JFrame MainWindow = new JFrame("Main Window");
MainWindow.setVisible(true);
MainWindow.setSize(500, 500);
MainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainWindow.add(this);
}
public void paint(Graphics g)
{
super.paint(g);
}
public static void main(String[] args)
{
MainClass temp = new MainClass();
Graphics g = (Graphics2D)temp.getGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 400, 400);
temp.repaint();
}
}
我的想法是,我有这个类,我可以获得画布的图形对象并直接在其上绘制并重新绘制。或者也许我正在考虑将形状和物体传递给一种能够在某个位置为我绘画的方法。
答案 0 :(得分:4)
getGraphics()
,您将获得一个可能在当时正常工作的短暂图形上下文,但如果发生任何重新绘制(并且这些不在您的控制之下)将无法工作,导致程序图形失败或NullPointerException。你应该避免这样做,除非你有迫切需要并知道你在做什么。要了解你正在做什么",请阅读Haase和Guy的书Filthy Rich Clients。paintComponent(...)
方法覆盖中绘制BufferedImage。