gpt4 book ai didi

java - JavaFX 中按钮的自定义碰撞形状

转载 作者:行者123 更新时间:2023-11-29 04:52:41 26 4
gpt4 key购买 nike

创建自定义按钮形状很容易,但是如何确保新形状也是按钮本身的“碰撞盒”?

在本例中,我创建了两个六边形按钮并将它们正确对齐。问题是按钮的碰撞框仍然是矩形的,当您将鼠标从上方的按钮移动到下方的按钮时,您会注意到碰撞框严格来说是矩形的,这使得自定义形状变得毫无用处。

有什么方法可以创建自定义碰撞形状或碰撞检查?

完整的工作示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;

public class Test extends Application {
public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
Pane aPane = new Pane();
aPane.setPrefWidth(100);
aPane.setPrefHeight(100);

aPane.getChildren().add(createHexAt(10, 10));
aPane.getChildren().add(createHexAt(35, 45));

Scene aScene = new Scene(aPane);

primaryStage.setScene(aScene);
primaryStage.show();
}

private Button createHexAt(double xPos, double yPos) {
Button aButton = new Button();
aButton.setLayoutX(xPos);
aButton.setLayoutY(yPos);
aButton.setPrefWidth(50);
aButton.setPrefHeight(50);
double[] path = new double[12];
for (int q = 0; q < 6; q++) {
double x = Math.cos(Math.PI / 3.0 * q + Math.PI / 2.0);
double y = Math.sin(Math.PI / 3.0 * q + Math.PI / 2.0);
path[q * 2] = x;
path[q * 2 + 1] = y;
}
Polygon aPoly = new Polygon(path);
aButton.setShape(aPoly);
return aButton;
}
}

最佳答案

打电话

aButton.setPickOnBounds(false);

这指示 JavaFX 仅在鼠标位于非透明像素上方时才将其视为位于按钮上方,而不是默认情况(即鼠标坐标与按钮的矩形边界相交)。

关于java - JavaFX 中按钮的自定义碰撞形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com