我有一个FXML文件,以及一个CSS文件和一个Controller.java文件。当鼠标悬停在FXML文件的按钮上时,
e.g。 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
答案 0 :(得分:1)
您可以完全使用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}" />
答案 1 :(得分:0)
我明白了。
在FXML中添加透明圆圈,并通过Controller.java进行编辑,而不是创建新的。
// 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
答案 2 :(得分:0)
为什么不使用按钮的给定hoverProperty?
circle.visibleProperty().bind(button.hoverProperty());
答案 3 :(得分:0)
这可能更好。特别是如果你要添加大量的圈子。
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
}
}