/*画直线和添加文本练习练习*/
import java.awt.*;
import java.awt.event.*;
public class DrawLine {


public static void main(String[]args){
new Demo();
}
}
class Demo extends Frame{
private Frame f;
int x;
int y;
int endx;
int endy;

Demo(){
Demo1();
}

public void paint(Graphics g){
g.drawLine(x, y, endx, endy);
}

private void Demo1(){
f=new Frame();
f.setBounds(300, 300, 300, 300);
//加载一下事件监听器。
init();

f.setVisible(true);

}
public void init(){
//千万要记住把监听器注册到组件上。
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

f.addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e){
x=e.getX();
y=e.getY();
}

public void mouseReleased(MouseEvent e){
Graphics g=getGraphics();

endx= e.getX();
endy=e.getY();
//画直线,颜色是红色
g.setColor(Color.RED);

//设置当前字体,颜色
g.setFont(new Font("隶书",/*如果改为null则会使用系统默认字体*/Font.ITALIC|Font.BOLD,/*字体的样式*/30/*字体的大小*/));

//打印鼠标按下时显示坐标的文本。
g.drawString(new String(x+","+y), x, y);//new String(x+","+y)获取坐标,x, y在坐标x,y处输出。
//g.drawString(new String(), x, y);
//打印鼠标释放时显示坐标的文本
g.drawString(new String(e.getX()+","+e.getY()), e.getX(), e.getY());
//g.drawString(new String(), e.getX(), e.getY());
g.drawLine(x, y, e.getX(), e.getY());
}
});

}

}

解决方案 »

  1.   

    private void Demo1(){构造函数名称写错了,这样你的 private Frame f; 就没机会被初始化了。修改为:
    public Demo(){
      

  2.   

    我在前面定义了个构造函数Demo,让对象一出始化就加载Demo1方法,如果按照你说的那样的话,运行效果和我的运行效果一样。
      

  3.   

    是不是我这句代码有问题啊Graphics g=getGraphics();
    如果改为Graphics g=this.getGraphics();的话,提示我创建getGraphics()方法。如果改为Graphics g=f.getGraphics();的话,运行的时候直线没有重绘上。
    你再帮我看下,麻烦你了。
      

  4.   

    for all people, who post code :
    please post the error message too
      

  5.   

    下面是代码运行后的提示信息。
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Demo$2.mouseReleased(DrawLine.java:58)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Window.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)