这是我第一次遇到 GUI,当我一直在学习和搜索时,我一直在尝试做一些练习,但遇到了这个错误。有人可以善意地解释一下为什么会发生这种情况吗?非常感谢。错误是“无法调用“java.awt.Graphics.setColor(java.awt.Color)”,因为“g”为空”
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Canvas;
import javax.swing.JFrame;
public class Circle extends Canvas {
public Circle() {
JFrame frame = new JFrame("Circle Exercise");
Canvas paper = new Canvas();
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(paper);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.RED);
g.drawOval(100, 100, 200, 200);
}
public static void main(String[] args) {
Circle drawing = new Circle();
drawing.paint(null);
}
}
drawing.paint(null);
删除该声明;不需要。
只要 Swing 确定需要绘制组件,组件就会自动绘制。
但是,您还有其他问题:
需要在框架可见之前将组件添加到框架中。
所有组件都应确定自己的首选大小,以便它们可以与布局管理器正确使用。所以你需要重写
getPreferredSize()
方法来返回合适的大小。
Canvas 是一个较旧的 AWT 组件。人们通常使用 Swing 组件进行绘画。通常,您会使用
JPanel
并覆盖 paintComponent(...)
方法。然后,您需要调用 super.paintComponent(...)
作为第一个语句,以确保背景被清除。
Swing 组件需要在事件调度线程 (EDT) 上创建。阅读关于 Custom Painting 的 Swing 教程,获取包含上述所有建议的示例,以便为您提供更好的结构化代码。