创建自定义按钮形状很容易,但是如何确保新形状也是"碰撞框"按钮本身?
在这种情况下,我创建了两个六角形按钮并正确对齐它们。问题是按钮的碰撞盒仍然是矩形的,当你将鼠标从上部按钮移动到下部按钮时,你会注意到碰撞盒是严格的矩形,并使自定义形状变得毫无用处。
是否可以创建自定义碰撞形状或碰撞检查?
完整的工作示例:
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;
}
}
答案 0 :(得分:3)
呼叫
aButton.setPickOnBounds(false);
这指示JavaFX仅将鼠标视为位于非透明像素上的按钮,而不是默认值(即鼠标坐标与按钮的矩形边界相交)。