绘制混合摆动和awt的线

时间:2013-02-10 00:15:42

标签: java swing awt

我尝试使用Graphics类绘制一条线,然后将其放在JFrame对象中:

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JLabel;

class Window
{
    private JFrame frame;
    private Graphics g;

    public void Window()
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(15, 0);
        frame.setSize(600, 200);
        frame.setVisible(true);

    }        

    public void DrawCross()
    { 

        g.setColor(Color.BLACK);
        g.drawLine(300,0, 200, 0);
        frame.paint(g);  
    }        

}      

...

run:
Exception in thread "main" java.lang.NullPointerException
    at Window.DrawCross(Window.java:33)
    at Main.main(main.java:21)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

我错在哪里以及如何解决我的错误?初始化Graphics类的抽象对象是不可能的。

3 个答案:

答案 0 :(得分:2)

Graphics对象尚未实例化,导致NPE被抛出。

这种做法完全错了。不要直接致电paint。也不要在JFrame上进行任何自定义绘画,而是添加JComponent的子类并覆盖paintComponent。在这里,您将拥有一个易于实例化的Graphics对象。

Painting in AWT and Swing

答案 1 :(得分:2)

主要错误是public Window()没有void。这是java中的构造函数表示法。当您调用new Window()时,您没有调用公共void函数Window,因此框架保持为null。因此NullPointerException。

答案 2 :(得分:0)

基于JoopEggen和Reimeus答案创建的工作代码:

import java.awt.*;
import javax.swing.*;

class Window
{
    private JFrame frame;

    public Window()
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(15, 0);
        frame.setSize(600, 200);
        frame.setVisible(true);
    }

    public void drawCoordinateSystem()
    {                
        frame.add( new CoordinateSystem());
    }        

} 



 public class CoordinateSystem extends JPanel 
{
    @Override 
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Dimension size = this.getSize();

        g.setColor(Color.BLACK);
        g.drawLine(0,size.height/2,size.width, size.height/2);

        g.drawLine(size.width/2, 0, size.width/2, size.height);

    }
}        


class Main 
{    
    public static void main(String [] args)
    {
     Window h = new Window();

     h.drawCoordinateSystem();      
    }        

}