我想在JavaFX应用程序中禁用某个特定时间的按钮。有没有这样做的选择?如果没有,有什么办法可以解决这个问题吗?
下面是我在应用程序中的代码。我尝试过Thread.sleep
,但我知道这不是阻止用户单击next按钮的好方法。
nextButton.setDisable(true);
final Timeline animation = new Timeline(
new KeyFrame(Duration.seconds(delayTime),
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
nextButton.setDisable(false);
}
}));
animation.setCycleCount(1);
animation.play();
发布于 2013-06-04 22:16:03
您可以使用提供相关图形用户界面调用的线程的简单方法(当然是通过runLater()
):
new Thread() {
public void run() {
Platform.runLater(new Runnable() {
public void run() {
myButton.setDisable(true);
}
}
try {
Thread.sleep(5000); //5 seconds, obviously replace with your chosen time
}
catch(InterruptedException ex) {
}
Platform.runLater(new Runnable() {
public void run() {
myButton.setDisable(false);
}
}
}
}.start();
这可能不是实现它的最巧妙的方法,但可以安全地工作。
发布于 2013-06-04 22:49:28
您也可以使用Timeline
:
final Button myButton = new Button("Wait for " + delayTime + " seconds.");
myButton.setDisable(true);
final Timeline animation = new Timeline(
new KeyFrame(Duration.seconds(delayTime),
new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent actionEvent) {
myButton.setDisable(false);
}
}));
animation.setCycleCount(1);
animation.play();
发布于 2013-06-04 21:58:00
禁用JavaFX控件的方法为:
myButton.setDisable(true);
您可以以您希望的任何方式以编程方式实现时间逻辑,可以通过轮询计时器或通过调用此方法来响应某些事件。
如果已在SceneBuilder中通过FXML创建了此按钮实例,则应为该按钮指定一个fx:id,以便在加载场景图期间将其引用自动注入控制器对象。这将使您更容易在控制器代码中使用。
如果您已经以编程方式创建了这个按钮,那么您的代码中就已经有了它的引用。
https://stackoverflow.com/questions/16919727
复制相似问题