2016-01-16 67 views
0

創建自定義按鈕形狀很容易,但如何確保新形狀也是按鈕本身的「碰撞盒」?JavaFX中按鈕的自定義碰撞形狀

在這種情況下,我創建了兩個hexagnol形狀的按鈕並將它們正確對齊。問題是按鈕的碰撞盒仍然是矩形,當你將鼠標從上面的按鈕移動到下面的按鈕時,你會注意到碰撞盒是嚴格的矩形,使得自定義形狀沒用。

任何方式來創建自定義碰撞形狀或碰撞檢查?

全部工作示例:

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

呼叫

aButton.setPickOnBounds(false); 

這指示的JavaFX只考慮鼠標爲在按鈕上,如果它是不是默認的通過非透明像素, (即鼠標座標與按鈕的矩形邊界相交)。

+0

太棒了!謝謝! – photenth