为以下区域定义接口:
//represents any clickable area.
public interface IButton{
boolean contains(int x, int y);
}
然后,如果要使圆形区域可单击,请定义一个类,用于检查x,y坐标是否在某个位置的某个距离内.
public class CircleButton implements IButton{
Point center;
double radius;
public CircleButton(int x, int y, double radius){
this.center = new Point(x,y);
this.radius = radius;
}
//check if x,y coords are within a radius
//from the center of this circle button
public boolean contains(int x, int y){
double dx = x-center.x;
double dy = y-center.y;
return (Math.sqrt(dx*dx+dy*dy) <= radius);
}
}
创建IButtons列表.您将迭代这些以查看用户是否单击了您的一个隐形按钮.
List buttons = new List();
buttons.add(new CircleButton(100,100,200);
然后,每当有人点击你的框架时,使用鼠标点击的位置迭代你的隐形按钮.
public void mouseReleased(MouseEvent e){
for(IButton b : buttons){
if(b.contains(evt.getX(),e.getY()){
//do something depending on what button was clicked.
}
}
}
您可以轻松地看到如何定义这样的隐形矩形按钮,甚至是不规则的多边形形状.您只需要正确实现contains方法.