簡體   English   中英

當鼠標懸停在JavaFX中的按鈕上方時,如何創建節點(圓)?

[英]How to create a node (Circle) while the mouse is hovering over a button in JavaFX?

我有一個FXML文件,以及一個CSS文件和一個Controller.java文件。 當鼠標懸停在FXML文件的按鈕上時,

例如fx:id="load"

如何在舞台上創建一個Circle節點?

我目前正在這樣做:

注意:FXML和Controller鏈接在一起,並考慮了所有導入。

// FXML:

<Button fx:id="load" layoutX="146.0" layoutY="307.0" mnemonicParsing="false"\
onMouseEntered="#hoverEnterLoad" onMouseExited="#hoverExitLoad"\
prefHeight="26.0" prefWidth="93.0" stylesheets="@title.css" />

// Controller:

public Controller {

    @FXML private Button load;
    private Circle choose = new Circle(210.0, 278.0, 15.0, Color.TRANSPARENT);

    /**                                                                                                                                                                              
     * Shows circle                                                                                                                                                                
     */
    @FXML void hoverEnterLoad(ActionEvent event) {
        choose.setCenterX(210.0);
        choose.setCenterY(278.0);
        choose.setFill(Color.BLACK);
        choose.setRadius(15.0);
    } // hoverEnterLoad                                                                                                                                                               

    /**                                                                                                                                                                              
     * Hides circle                                                                                                                                                                
     */
    @FXML void hoverExitLoad(ActionEvent event) {
        choose.setFill(Color.TRANSPARENT);
    } // hoverExitLoad

} // Controller

您可以完全在FXML中完成此操作:

<Button fx:id="load" layoutX="146.0" layoutY="307.0" mnemonicParsing="false"\
onMouseEntered="#hoverEnterLoad" onMouseExited="#hoverExitLoad"\
prefHeight="26.0" prefWidth="93.0" stylesheets="@title.css" />
<Circle fx:id="selector" centerX="255.0" centerY="291.0" fill="BLACK" radius="5.0" stroke="TRANSPARENT" strokeType="INSIDE" visible="${load.hover}" />

我想到了。

將透明的Circle添加到FXML中,然后通過Controller.java對其進行編輯,而不是創建一個新的Circle。

// FXML:
// Added:

<Circle fx:id="selector" centerX="255.0" centerY="291.0" fill="TRANSPARENT" radius="5.0" stroke="TRANSPARENT" strokeType="INSIDE" />

// Controller:
// Added/Updated:

public Controller {

    @FXML private Button load;
    @FXML private Circle choose;

    /**                                                                                                                                                                              
     * Shows circle                                                                                                                                                                
     */
    @FXML void hoverEnterLoad(ActionEvent event) {
        choose.setCenterX(210.0);
        choose.setCenterY(278.0);
        choose.setFill(Color.BLACK);
        choose.setRadius(15.0);
    } // hoverEnterLoad                                                                                                                                                               

    /**                                                                                                                                                                              
     * Hides circle                                                                                                                                                                
     */
    @FXML void hoverExitLoad(ActionEvent event) {
        choose.setFill(Color.TRANSPARENT);
    } // hoverExitLoad

} // Controller

為什么不只使用給定的Button的hoverProperty?

circle.visibleProperty().bind(button.hoverProperty());

這可能更好。 特別是如果您要添加很多圈子。

public class FXMLDocumentController implements Initializable {

    @FXML private AnchorPane apMain;
    @FXML private Button load;
    Circle choose;




    @FXML void hoverEnterLoad(MouseEvent event) {
        choose = new Circle();
        choose.setCenterX(50.0);
        choose.setCenterY(50.0);
        choose.setFill(Color.BLACK);
        choose.setRadius(15.0);
        apMain.getChildren().add(choose);
        System.out.println("Mouse over button!");
    } // hoverEnterLoad                                                                                                                                                               

    /**                                                                                                                                                                              
     * Hides circle                                                                                                                                                                
     */
    @FXML void hoverExitLoad(MouseEvent event) {
        apMain.getChildren().remove(choose);
        System.out.println("Mouse no longer over!");
    } // hoverExitLoad

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM