当然如果是用Graphics画图是没问题的,但我要怎么接受鼠标点击时间呢。如果通过鼠标点击事件的点击坐标,如何来判断是和节点呢。
如果是用drawImage来实现,似乎存在同样的问题,是不是可以接受鼠标事件,还有就是连线的端点怎么定位到图片上。
各位大侠有什么妙计,请教教小弟,不胜感激。
12 个解决方案
#1
鼠标事件是发生在组建上,而不是发生在image上,所以用什么显示图形都无所谓,关键在于判断鼠标事件的xy坐标是发生在哪个图形元素上的,图形元素要是没有重叠,很简单,不同的图形有不同的坐标判断方法;如果有重叠,要考虑图形元素的z-order。
abstract class Figure
{
public abstract void draw(Graphics g);
public abstract void isPointIn(int x,int y); //点(x,y)是否在该图形元素内
//....
}
class Circle extends Figure
{
private int x0,y0,r;
public void isPointIn(int x,int y)
{
if( (x-x0)*(x-x0)+(y-y0)*(y-y0)<=r*r ){
return true;
}else{
return false;
}
}
//....
}
abstract class Figure
{
public abstract void draw(Graphics g);
public abstract void isPointIn(int x,int y); //点(x,y)是否在该图形元素内
//....
}
class Circle extends Figure
{
private int x0,y0,r;
public void isPointIn(int x,int y)
{
if( (x-x0)*(x-x0)+(y-y0)*(y-y0)<=r*r ){
return true;
}else{
return false;
}
}
//....
}
#2
用VML吧
#3
使用jgraph,用事件监听判断
#4
upup
prototype pattern
prototype pattern
#5
GhostValley:我最初打算的是来判断鼠标的坐标位置的,但有一个问题请帮忙想想,我当时的想法是,当点击鼠标,在mousePressed方法中得到point,然后遍历各个节点,判断point是不是在节点内,但是,如果节点比较多的话,层次关系较复杂的话呢,怎么办
#6
不要采用遍历的方法,用四叉树分割空间来存储节点,可以达到log(4,n)的时间复杂度
#7
流程设计器我曾经写过,如果你光用graphic的mousePressed等事件来监听判断,到元素多了后就有点问题,就象在mfc的View中画图,如果全写在view中,你以后修改会很困难,因为复杂度会猛增,所以把画图工作分到你的图形对象中是一个较好的设计,这样做要求你要设计一个事件机制,让你的图形对象能得到鼠标事件。呵呵,java的好处在于,它没有mfc这样要求有固定的事件路径,你完全可以自己定义事件族及流向。
当然你也可以向GhostValley说的用比较复杂的算法来做,这是以数据结构为中心的。而我的实践是以图形对象为中心的。
呵呵,这年头,用java2d好想不多啊!
当然你也可以向GhostValley说的用比较复杂的算法来做,这是以数据结构为中心的。而我的实践是以图形对象为中心的。
呵呵,这年头,用java2d好想不多啊!
#8
up
#9
没什么问题。。。。简单着呢。。呵呵。
#10
用PropertyChangeListener和PropertyChangeEvent不用判断鼠标位置。表现节点的组件添加
addPropertyChangeListener(),接点不用画,用JLable就可以了。
addPropertyChangeListener(),接点不用画,用JLable就可以了。
#11
谢谢大家的帮忙,我现在打算用jgraph来做,今天看了其文档和一些实例,应该能实现我的要求,正在研究中,不过时间真的比较紧,那位兄弟用用过jgraph,能不能教教我,我的msn:ewei3000112@hotmail.com, QQ:305953921.
#12
请问哪位有用过jgraph吗,我现在需要在applet上画一个圆形节点,谁能教教我吗
#1
鼠标事件是发生在组建上,而不是发生在image上,所以用什么显示图形都无所谓,关键在于判断鼠标事件的xy坐标是发生在哪个图形元素上的,图形元素要是没有重叠,很简单,不同的图形有不同的坐标判断方法;如果有重叠,要考虑图形元素的z-order。
abstract class Figure
{
public abstract void draw(Graphics g);
public abstract void isPointIn(int x,int y); //点(x,y)是否在该图形元素内
//....
}
class Circle extends Figure
{
private int x0,y0,r;
public void isPointIn(int x,int y)
{
if( (x-x0)*(x-x0)+(y-y0)*(y-y0)<=r*r ){
return true;
}else{
return false;
}
}
//....
}
abstract class Figure
{
public abstract void draw(Graphics g);
public abstract void isPointIn(int x,int y); //点(x,y)是否在该图形元素内
//....
}
class Circle extends Figure
{
private int x0,y0,r;
public void isPointIn(int x,int y)
{
if( (x-x0)*(x-x0)+(y-y0)*(y-y0)<=r*r ){
return true;
}else{
return false;
}
}
//....
}
#2
用VML吧
#3
使用jgraph,用事件监听判断
#4
upup
prototype pattern
prototype pattern
#5
GhostValley:我最初打算的是来判断鼠标的坐标位置的,但有一个问题请帮忙想想,我当时的想法是,当点击鼠标,在mousePressed方法中得到point,然后遍历各个节点,判断point是不是在节点内,但是,如果节点比较多的话,层次关系较复杂的话呢,怎么办
#6
不要采用遍历的方法,用四叉树分割空间来存储节点,可以达到log(4,n)的时间复杂度
#7
流程设计器我曾经写过,如果你光用graphic的mousePressed等事件来监听判断,到元素多了后就有点问题,就象在mfc的View中画图,如果全写在view中,你以后修改会很困难,因为复杂度会猛增,所以把画图工作分到你的图形对象中是一个较好的设计,这样做要求你要设计一个事件机制,让你的图形对象能得到鼠标事件。呵呵,java的好处在于,它没有mfc这样要求有固定的事件路径,你完全可以自己定义事件族及流向。
当然你也可以向GhostValley说的用比较复杂的算法来做,这是以数据结构为中心的。而我的实践是以图形对象为中心的。
呵呵,这年头,用java2d好想不多啊!
当然你也可以向GhostValley说的用比较复杂的算法来做,这是以数据结构为中心的。而我的实践是以图形对象为中心的。
呵呵,这年头,用java2d好想不多啊!
#8
up
#9
没什么问题。。。。简单着呢。。呵呵。
#10
用PropertyChangeListener和PropertyChangeEvent不用判断鼠标位置。表现节点的组件添加
addPropertyChangeListener(),接点不用画,用JLable就可以了。
addPropertyChangeListener(),接点不用画,用JLable就可以了。
#11
谢谢大家的帮忙,我现在打算用jgraph来做,今天看了其文档和一些实例,应该能实现我的要求,正在研究中,不过时间真的比较紧,那位兄弟用用过jgraph,能不能教教我,我的msn:ewei3000112@hotmail.com, QQ:305953921.
#12
请问哪位有用过jgraph吗,我现在需要在applet上画一个圆形节点,谁能教教我吗