swing画图问题

apache2007 2008-11-10 12:29:56
这是我编的小程序
package com.sinosoft.finance.paint;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*为了达到画线的功能,我们分别implements MouseListener与MouseMotionListener.
*/
public class MenuPane extends JFrame implements MouseListener,MouseMotionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
int flag;//flag=1代表Mouse Moved,flag=2代表Mouse Dragged
int x=0;
int y=0;
int startx,starty,endx,endy;//起始坐标与终点坐标
public MenuPane(){
Container contentPane=getContentPane();
contentPane.addMouseListener(this);
contentPane.addMouseMotionListener(this);
setSize(300,300);
show();
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
/*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/
public void mousePressed(MouseEvent e){
startx=e.getX();
starty=e.getY();
}
public void mouseReleased(MouseEvent e){
endx=e.getX();
endy=e.getY();
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseClicked(MouseEvent e){
}
/*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/
public void mouseMoved(MouseEvent e){
flag=1;
x=e.getX();
y=e.getY();
repaint();
}
public void mouseDragged(MouseEvent e){
flag=2;
x=e.getX();
y=e.getY();
repaint();
}
public void update(Graphics g){
g.setColor(this.getBackground());
g.fillRect(0,0,getWidth(),getHeight());
paint(g);
}
public void paint(Graphics g){
g.setColor(Color.black);
if (flag==1){
g.drawString("鼠标坐标:("+x+","+y+")",10,50);
g.drawLine(startx,starty,endx,endy);
}
if (flag==2){
g.drawString("拖曳鼠标价坐标:("+x+","+y+")",10,50);
g.drawLine(startx,starty,x,y);
}
}
public static void main(String[] args){
new MenuPane();
}
}

为什么在画图的时候 画出的线离鼠标位置有一段距离??
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
apache2007 2008-11-13
  • 打赏
  • 举报
回复
谢谢给位了 我用了别的方法解决了 3q
dqf80119208 2008-11-13
  • 打赏
  • 举报
回复
先关注
cowputer 2008-11-12
  • 打赏
  • 举报
回复
代码改一下,contentPane和JFrame的size是不同的,你差的那部分是frame的size减去contentPane的size的大小

/*Container contentPane=getContentPane();
contentPane.addMouseListener(this);
contentPane.addMouseMotionListener(this); */
this.addMouseListener(this);
this.addMouseMotionListener(this);
bsr1983 2008-11-11
  • 打赏
  • 举报
回复
应该是和鼠标的热点hotspot有关吧,至于什么是鼠标热点可参考http://topic.csdn.net/u/20080627/06/166d0be4-4ed2-417e-b026-b99b839ccb92.html

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧