我得代码如下,我本想在实例化类JP的时候传两个参数给它,但是程序老是报错,报错内容在代码下面
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ShowRec_Ove { public static void main(String[] args) {
new JF().show();
}
}class JP extends JPanel
{
public JP(int x,int y)
{
Graphics g=this.getGraphics();
g.setColor(Color.RED);
g.setFont(new Font("黑体",Font.BOLD+Font.ITALIC,20));
g.drawString("test",x,y);
}}
class JF extends JFrame
{
public JF()
{
setTitle("test");
setSize(600,300);
getContentPane().add(new JP(30,39));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
报错如下:
java.lang.NullPointerException
at accp.JP.<init>(ShowRec_Ove.java:30)
at accp.JF.<init>(ShowRec_Ove.java:43)
at accp.ShowRec_Ove.main(ShowRec_Ove.java:21)
Exception in thread "main"
到底哪里错了呢?
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ShowRec_Ove { public static void main(String[] args) {
new JF().show();
}
}class JP extends JPanel
{
public JP(int x,int y)
{
Graphics g=this.getGraphics();
g.setColor(Color.RED);
g.setFont(new Font("黑体",Font.BOLD+Font.ITALIC,20));
g.drawString("test",x,y);
}}
class JF extends JFrame
{
public JF()
{
setTitle("test");
setSize(600,300);
getContentPane().add(new JP(30,39));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
报错如下:
java.lang.NullPointerException
at accp.JP.<init>(ShowRec_Ove.java:30)
at accp.JF.<init>(ShowRec_Ove.java:43)
at accp.ShowRec_Ove.main(ShowRec_Ove.java:21)
Exception in thread "main"
到底哪里错了呢?
{
g.setColor(Color.RED);
g.setFont(new Font("黑体",Font.BOLD+Font.ITALIC,20));
g.drawString("test",x,y);
}
才好用,书上说一般都要重写这个方法画图。我试了换个方法名字,然后在JF类中人工调用它,传JP类的getGraphics()做为参数,但还是出这个异常,哎,我也是菜鸟,没办法啊,你就重写public void paintComponent(Graphics g){}方法吧,或者等大大们回复你
记住paintComponent(Graphics g)这个函数就ok了class JP extends JPanel
{
private int x,y;
public JP(int x,int y)
{
this.x = x;
this.y = y;
}
public void paintComponent(Graphics g)
{
g.setColor(Color.RED);
g.setFont(new Font("黑体",Font.BOLD+Font.ITALIC,20));
g.drawString("test",x,y);
}
}
你觉得什么时候调用 Graphics g=this.getGraphics();才不会使g为null呢?
子级将被添加到 contentPane。内容窗格始终是非 null 的。试图将其设置为 null 会导致 JFrame 抛出异常。默认的内容窗格上会设置有 BorderLayout 管理器。有关添加、移除和设置 JFrame 的 LayoutManager 的详情,请参阅 RootPaneContainer。