我有这两个MouseEvent,我希望它们“集中化”,因为我有其他节点也会做同样的事情。我知道如果创建多个MouseEvent,就可以做到这一点,但我认为一定有一个更短的方法。
public class scMain implements Initializable {
@FXML
private Button btnView, btnView2;
@FXML
private HBox hboxView, hboxView2;
public void translateTransition(Node node) {
TranslateTransition translate = new TranslateTransition();
translate.setNode(node);
// ...animation stuff
translate.play();
}
public void fadeOffTransition(Node node) {
FadeTransition fade = new FadeTransition();
fade.setNode(node);
// ...animation stuff
fade.play();
}
public void fadeInTransition(Node node) {
FadeTransition fade = new FadeTransition();
fade.setNode(node);
// ...animation stuff
fade.play();
}
@FXML
void btnMouseEnter(MouseEvent event) {
fadeOffTransition(btnView);
hboxView.setVisible(true);
translateTransition(hboxView);
}
@FXML
void btnMouseExit(MouseEvent event) {
fadeInTransition(btnView);
hboxView.setVisible(false);
}}
我试过但显然不起作用的是:
@FXML
void btnMouseEnter(MouseEvent event, Node first, Node second) {
fadeOffTransition(first);
second.setVisible(true);
translateTransition(second);
}
@FXML
void btnMouseExit(MouseEvent event, Node first, Node second) {
fadeInTransition(first);
second.setVisible(false);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
btnMouseEnter(event, btnView2, hboxView2); //error cannot find symbol
btnMouseExit(event, btnView2, hboxView2); //error cannot find symbol
}
如有任何建议,我们将不胜感激。
1条答案
按热度按时间4bbkushb1#
在
intialize()
方法中注册事件处理程序,而不是在FXML中注册。从FXML文件中删除onMouseEnter
和onMouseExit
属性,并修改控制器,如下所示:您还可以明显减少代码,例如:
如果您有相当多的这样的代码,那么这样做也可能更有效(就代码行而言)
您还可以考虑创建一个封装button和hbox的自定义组件,该组件只实现单个button-hbox对的事件处理程序,然后使用
fx:include
将它们包含在FXML中。