Java 我如何在JPanel上绘制,然后在JFrame上显示?
我曾试图研究Java的2D渲染是如何工作的,但我始终无法理解它。以下是我的主类中的代码:Java 我如何在JPanel上绘制,然后在JFrame上显示?,java,swing,user-interface,nullpointerexception,jpanel,Java,Swing,User Interface,Nullpointerexception,Jpanel,我曾试图研究Java的2D渲染是如何工作的,但我始终无法理解它。以下是我的主类中的代码: import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; public class Main{ public static void main(String args[]) { JFrame frame = new JFrame(); frame.setSiz
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main{
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setSize(new Dimension(500,500));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("JFrame testing");
frame.setVisible(true);
Frame panel = new Frame();
frame.add(panel);
}
}
然后是JPanel类:
我也得到了这个例外,但我不确定这意味着什么:
Exception in thread "main" java.lang.NullPointerException
at Frame.<init>(Frame.java:10)
at Main.main(Main.java:18)
我基本上只是想在面板上画一个矩形,显示在我创建的框架上。我听说过paintComponent方法,但我也不完全理解 永远不要使用组件的getGraphics
试试下面的代码
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0, 0, 100, 100);
//this.paintComponent(g);
}
编辑
为什么是super.PaintComponent;在方法内部再次调用
paintComponent的组件很好地说明了这一点:
如果不调用super的实现,则必须遵守不透明的
属性,即如果此组件是不透明的,则必须完全
用非不透明的颜色填充背景。如果你不尊重
不透明属性您可能会看到视觉瑕疵
谢谢你,但是你介意解释一下这是做什么的吗?因为我不太确定paintComponent方法是做什么的。当你的项目运行时,paintComponent函数会被调用,方法是将Graphics参数作为图形上下文传递给你,你可以在它上面绘制。所以我了解到paintComponent正在重写Jcomponent对象,但为什么是super.PaintComponent;在方法内部再次调用?您可能会看到抱歉,我刚刚将注释更新为:因此我了解到paintComponent正在重写Jcomponent对象,但为什么super.paintComponent;在方法内部再次调用?我只是试着不用它,但它仍然有效,那么把它包括进去有什么意义呢?
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0, 0, 100, 100);
//this.paintComponent(g);
}