JavaFX长按按钮
我目前正在用JavaFx构建一个带有GluonMobile插件的移动应用程序,我试图找到一种方法来知道用户是否只需点击按钮,或者按钮是否被按下超过2秒钟 我尝试了几件事,却遇到了一些问题 问题是我在网上找到了这个方法,他是我的问题 首先是代码JavaFX长按按钮,javafx,gluon-mobile,Javafx,Gluon Mobile,我目前正在用JavaFx构建一个带有GluonMobile插件的移动应用程序,我试图找到一种方法来知道用户是否只需点击按钮,或者按钮是否被按下超过2秒钟 我尝试了几件事,却遇到了一些问题 问题是我在网上找到了这个方法,他是我的问题 首先是代码 button.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() { long startTime; @Override
button.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
long startTime;
@Override
public void handle(MouseEvent event) {
if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED)) {
startTime = System.currentTimeMillis();
} else if (event.getEventType().equals(MouseEvent.MOUSE_RELEASED)) {
if (System.currentTimeMillis() - startTime > 2 * 1000) {
System.out.println("Pressed for at least 2 seconds (" + (System.currentTimeMillis() - startTime) + " milliseconds)");
} else
System.out.println("Pressed for " + (System.currentTimeMillis() - startTime) + " milliseconds");
}
}
});
button.addEventFilter(MouseEvent.ANY,neweventhandler()){
长启动时间;
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getEventType().equals(MouseEvent.MOUSE_按下)){
startTime=System.currentTimeMillis();
}else if(event.getEventType().equals(MouseEvent.MOUSE_已释放)){
如果(System.currentTimeMillis()-startTime>2*1000){
System.out.println(“按下至少2秒(+(System.currentTimeMillis()-startTime)+“毫秒”);
}否则
System.out.println(“按下表示”+(System.currentTimeMillis()-startTime)+“毫秒”);
}
}
});
我这里的问题真的很奇怪
当我点击按钮时,该方法工作。
如果我点击超过2秒,它会打印出好的结果
但是
如果我再次单击它,它将打印2次。
如果我第三次单击,它将打印结果3次
所以问题是当我放置一个方法(比如一个对话框)时,这个框会显示3次
这就像程序有我点击它多少次的记忆,然后给我点击按钮的次数
我可以“重置”该方法的内存吗
谢谢
Jc
编辑
@FXML
公共作废按钮单击(ActionEvent ActionEvent){
btn1.addEventFilter(MouseEvent.ANY,neweventhandler()){
长启动时间;
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getEventType().equals(MouseEvent.MOUSE_按下)){
startTime=System.currentTimeMillis();
}else if(event.getEventType().equals(MouseEvent.MOUSE_已释放)){
如果(System.currentTimeMillis()-startTime>2*1000){
System.out.println(“按下至少2秒(+(System.currentTimeMillis()-startTime)+“毫秒”);
}否则
System.out.println(“按下表示”+(System.currentTimeMillis()-startTime)+“毫秒”);
}
}
});
}
这里有一个“长按事件”片段:关于您的问题,它对我来说很好,但看起来您是在一次又一次地向按钮添加事件过滤器?你能发布你的视图吗?我编辑了第一个postHmm…,每次你点击按钮,你都在添加一个新的事件过滤器。即使你使用了事件,最好只设置一次事件过滤器,即在initialize()
方法中。
@FXML
public void buttonClick(ActionEvent actionEvent) {
btn1.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
long startTime;
@Override
public void handle(MouseEvent event) {
if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED)) {
startTime = System.currentTimeMillis();
} else if (event.getEventType().equals(MouseEvent.MOUSE_RELEASED)) {
if (System.currentTimeMillis() - startTime > 2 * 1000) {
System.out.println("Pressed for at least 2 seconds (" + (System.currentTimeMillis() - startTime) + " milliseconds)");
} else
System.out.println("Pressed for " + (System.currentTimeMillis() - startTime) + " milliseconds");
}
}
});
}