import java.awt.*;
import java.awt.event.*;public class DrawLine extends Frame
{
static int starX;
static int starY;
static int endX;
static int endY;
static Graphics graphics; public DrawLine()
{
this.setSize(400,300);
this.setLocation(300,200);
this.addMouseListener(new MyMouseAdapter());
this.addMouseMotionListener(new MyMouseMotionAdapter());
this.addWindowListener(new WindowClosing());
this.setVisible(true);
} public static void main(String args[])
{
DrawLine drawline=new DrawLine();
}
}class WindowClosing extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
e.getWindow().dispose();
System.exit(0);
}
}class MyMouseAdapter extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
DrawLine.starX=e.getX();
DrawLine.starY=e.getY();
}
public void mouseReleased(MouseEvent e)
{
DrawLine.endX=e.getX();
DrawLine.endY=e.getY();
DrawLine.graphics.drawLine(DrawLine.starX,DrawLine.starY,DrawLine.endX,DrawLine.endY);
}
} class MyMouseMotionAdapter extends MouseMotionAdapter
{
}
这程序可以运行,但运行后我点击运行的界面时就会出现异常,有哪位高手指点一下~
import java.awt.event.*;public class DrawLine extends Frame
{
static int starX;
static int starY;
static int endX;
static int endY;
static Graphics graphics; public DrawLine()
{
this.setSize(400,300);
this.setLocation(300,200);
this.addMouseListener(new MyMouseAdapter());
this.addMouseMotionListener(new MyMouseMotionAdapter());
this.addWindowListener(new WindowClosing());
this.setVisible(true);
} public static void main(String args[])
{
DrawLine drawline=new DrawLine();
}
}class WindowClosing extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
e.getWindow().dispose();
System.exit(0);
}
}class MyMouseAdapter extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
DrawLine.starX=e.getX();
DrawLine.starY=e.getY();
}
public void mouseReleased(MouseEvent e)
{
DrawLine.endX=e.getX();
DrawLine.endY=e.getY();
DrawLine.graphics.drawLine(DrawLine.starX,DrawLine.starY,DrawLine.endX,DrawLine.endY);
}
} class MyMouseMotionAdapter extends MouseMotionAdapter
{
}
这程序可以运行,但运行后我点击运行的界面时就会出现异常,有哪位高手指点一下~
楼主【aheqq】截止到2008-07-12 02:37:26的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:80 每贴平均分数:20
回帖的总数量:3 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:4 未结的总分数:80
结贴的百分比:0.00 % 结分的百分比:0.00 %
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
看了才知道是那个地方有debug啊
让你见识一下真正的画线,hohoimport java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;public class DrawPane extends JComponent
{
private static final long serialVersionUID = -8963598853892068851L; private int startX = 0; private int startY = 0; private int endX = 0; private int endY = 0; private List<Draw> drawList = new ArrayList<Draw>(); private Color color = Color.BLUE; private Font font = new Font("Courier New", Font.BOLD, 14); private boolean drawing = false; public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
final DrawPane draw = new DrawPane();
JFrame frame = new JFrame();
frame.setTitle("Draw Demo");
frame.add(draw, BorderLayout.CENTER);
frame.setSize(500, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.WHITE);
frame.setVisible(true); new Thread()
{
int i = 0; public void run()
{
while(i < 10)
{
try
{
sleep(1000);
i++;
}
catch(InterruptedException e)
{
e.printStackTrace();
}
} draw.setColor(Color.GREEN);
draw.setFont(new Font("Courier New", Font.BOLD, 20));
}
}.start();
}
});
} public DrawPane()
{
super();
init();
} public void paintComponent(Graphics g)
{
super.paintComponent(g); for(Draw draw: drawList)
{
draw.draw(g);
} if(drawing)
{
g.drawString(endX + "," + endY, endX, endY);
g.drawLine(startX, startY, endX, endY);
}
} private void init()
{
addMouseListener(new MouseL());
addMouseMotionListener(new MouseMotionL());
addComponentListener(new ComponentL());
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
} public Color getColor()
{
return color;
} public void setColor(Color color)
{
this.color = color;
} public Font getFont()
{
return font;
} public void setFont(Font font)
{
this.font = font;
} private class MouseL extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
startX = e.getX();
startY = e.getY();
drawList.add(new Text(font, color, startX, startY));
repaint();
} public void mouseReleased(MouseEvent e)
{
drawing = false;
endX = e.getX();
endY = e.getY();
drawList.add(new Line(font, color, startX, startY, endX, endY));
drawList.add(new Text(font, color, endX, endY));
repaint();
startX = 0;
startY = 0;
endX = 0;
endY = 0;
}
} private class MouseMotionL extends MouseMotionAdapter
{
public void mouseDragged(final MouseEvent e)
{
drawing = true;
endX = e.getX();
endY = e.getY();
repaint();
}
} private class ComponentL extends ComponentAdapter
{
public void componentResized(final ComponentEvent e)
{
repaint();
}
}
private class Line implements Draw
{
private int orgX = 0; private int orgY = 0; private int endX = 0; private int endY = 0; private Font font; private Color color; public Line(Font font, Color color, int orgX, int orgY, int endX, int endY)
{
this.orgX = orgX;
this.orgY = orgY;
this.endX = endX;
this.endY = endY;
this.color = color;
this.font = font;
} public void draw(Graphics g)
{
g.setFont(font);
g.setColor(color);
g.drawLine(orgX, orgY, endX, endY);
}
} private class Text implements Draw
{
private int orgX = 0; private int orgY = 0; private Font font; private Color color; public Text(Font font, Color color, int orgX, int orgY)
{
this.orgX = orgX;
this.orgY = orgY;
this.color = color;
this.font = font;
} public void draw(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
g2d.setStroke(new BasicStroke(2));
g.setFont(font);
g.setColor(color);
g.drawString(orgX + "," + orgY, orgX, orgY);
}
} private interface Draw
{
public void draw(Graphics g);
}
}
public void mouseReleased(MouseEvent e)
{
DrawLine.endX=e.getX();
DrawLine.endY=e.getY();
DrawLine.graphics.drawLine(DrawLine.starX,DrawLine.starY,DrawLine.endX,DrawLine.endY);
}
真正的错误在这一行:DrawLine.graphics.drawLine(DrawLine.starX,DrawLine.starY,DrawLine.endX,DrawLine.endY);
因为你声明了graphics但是你没有初始化这个东西,当然是NullPointerException咯。
解决方法是 使用
public void paint( Graphics g){
g.drawLine(DrawLine.starX,DrawLine.starY,DrawLine.endX,DrawLine.endY);
}
然后在你的事件中使用
repaint();
HOHO很久没有看到用JB开发界面的,鼓励下你。