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

标签 java javafx

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

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

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

完整的工作示例:

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/

相关文章:

java - 如何动画 View 的高度?

java - 使用本地存储的.jar文件作为Maven项目中的依赖项: compile class files

java - 检测鼠标点击 SELECTION Editable ComboBox JavaFX

java - 条形图中的动态数据无法正常工作javaFX

java - Spring Boot 修改默认 JSON 响应

java - 为什么 java.util.Calendar 将最小 WEEK_OF_MONTH 值返回为零?

java - JooQ 中的 DuplicateKeyException

webview - javaFX webview window.onload 在 loadworker 成功之前被触发

java - 编码字符串在java中不能正常工作

java - 如何获取网格 Pane 内的信息(javaFX)