![](/img/trans.png)
[英]How to make a node move whenever mouse is move over the scene (in 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.