我尝试在javafx中设计自定义按钮,但是找到多边形时遇到了一些问题:
public class PlayButton extends Group{
public static final int PLAY = 0, PAUSE = 1;
private int state = PAUSE;
private Circle background;
private Polygon triangle;
public PlayButton(){
background = new Circle(20);
background.setStroke(MyApp.FIRST_COLOR);
background.setStrokeWidth(2);
background.setEffect(MyApp.DROP_SHADOW);
background.setCursor(Cursor.HAND);
background.setFill(MyApp.SECOND_COLOR_OPAQUE);
this.getChildren().add(background);
triangle = new Polygon();
triangle.getPoints().addAll(new Double[]{10.0, 10.0, 40.0, 25.0, 10.0, 40.0});
triangle.setFill(MyApp.FIRST_COLOR);
this.getChildren().add(triangle);
}
public void setState(int state){
this.state = state;
}
}
我的多边形超出了我的背景,但我不明白为什么:
矩形是一个进度条,对他来说没问题 谢谢你的帮助
答案 0 :(得分:1)
您正在使用三角形的绝对坐标,但如果您希望它们始终重叠,则应该使用相对于圆的坐标。要获得圆圈的封闭矩形的左上角,请执行以下操作:
float[] backgroundTopLeft = new float[] {
background.getCenterX() - background.getRadius(),
background.getCenterY() - background.getRadius()};
然后绘制相对于该坐标的三角形作为三角形的左上角。
答案 1 :(得分:0)
经过一些测试后,我认为多边形点的位置是从我的组的中心计算出来的,我背景中圆的半径是20,然后坐标从-20开始到20结束,那么好的坐标是:
triangle.getPoints().addAll(new Double[]{-5.0, -10.0, 12.0, 0.0, -5.0, 10.0});
然后它看起来像那样:
有人可以告诉我,我是错还是对? 否则,我希望这可以帮助别人。