我试图显示一个计时器,它在点击开始按钮后计数并在标签中显示秒数,但我没有得到想要的输出。这是我的控制器代码和FXML文件。。。
public class FXMLDocumentController implements Initializable {
@FXML
private static final Integer STARTTIME = 0;
private Timeline timeline;
private Label timerLabel = new Label();
private IntegerProperty timeSeconds = new SimpleIntegerProperty(STARTTIME);
Button button = new Button();
public void handle(ActionEvent event) {
if (timeline != null) {
timeline.stop();
}
timeSeconds.set(STARTTIME);
timeline = new Timeline();
timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(STARTTIME+1),
new KeyValue(timeSeconds, 0)));
timeline.playFromStart();
timerLabel.textProperty().bind(timeSeconds.asString());
}
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
这是我的FXML代码...
xml prettyprint-override"><Button fx:id="button" layoutX="120.0" layoutY="40.0"
mnemonicParsing="false" text="Start Timmer" onAction="#handle" />
<Label layoutX="132.0" layoutY="92.0" prefHeight="17.0" prefWidth="65.0"
textFill="#f20b0b">
<font>
<Font size="24.0" />
</font>
</Label>
您没有正确使用Timeline
。
关键帧的持续时间是执行更新时从动画开始的偏移量。多次单击按钮都会添加动画开始后1秒运行的关键帧。
此外,使用
KeyValue
将当前值插值为传递给KeyValue
的值。如果新值与旧值相同,这就没有什么意义。
相反,您应该使用
EventHandler
此外,
按钮
字段应该由FXMLLoader
注入。这要求该字段为公共
或用@FXML
注释。
<Button fx:id="button" layoutX="120.0" layoutY="40.0"
mnemonicParsing="false" text="Start Timmer" onAction="#handle" />
<Label fx:id="timerLabel" layoutX="132.0" layoutY="92.0" prefHeight="17.0" prefWidth="65.0"
textFill="#f20b0b">
<font>
<Font size="24.0" />
</font>
</Label>
public class FXMLDocumentController implements Initializable {
private static final int STARTTIME = 0;
private Timeline timeline;
private final IntegerProperty timeSeconds = new SimpleIntegerProperty(STARTTIME);
@FXML
private Label timerLabel;
@FXML
private Button button;
private void updateTime() {
// increment seconds
int seconds = timeSeconds.get();
timeSeconds.set(seconds+1);
}
public void handle(ActionEvent event) {
button.setDisable(true); // prevent starting multiple times
timeline = new Timeline(new KeyFrame(Duration.seconds(1), evt -> updateTime()));
timeline.setCycleCount(Animation.INDEFINITE); // repeat over and over again
timeSeconds.set(STARTTIME);
timeline.play();
}
public void initialize(URL url, ResourceBundle rb) {
// TODO
timerLabel.textProperty().bind(timeSeconds.asString());
}
}
问题内容: 我正在用这个 但是这个: 给我这个错误: 而且我真的不明白怎么了 问题答案: 可能是因为您误解了工作原理。 正确的代码段为: 但: 我强烈建议您不要使用,而是使用!它是JavaFX API的一部分,您不必执行这些调用。这只是很快就被黑了,但是您知道了:
问题内容: 我试图混淆我的JavaFX应用程序,但失败了。生成的结果不起作用,我不明白为什么。最终的jar失败了,因为fxml文件无法再加载所有导入(ClassNotFoundException)。 部署工作流程: 生成可运行的jar(在IntelliJ知识中作为工件) 用ProGuard混淆那个罐子 修复ProGuard无法执行的那个jar中的一些问题 1)最小示例应用 示例应用程序“ Guar
我试图混淆我的JavaFX应用程序,但它失败了。生成的结果不工作,我不明白为什么。由于fxml文件无法加载所有导入(ClassNotFoundException),因此生成的jar会失败。 null null 现在结构看起来是这样的: sample.fxml文件现在如下所示: 现在这个罐子应该真的又能工作了,因为一切又正常了。但事实并非如此!fxml加载程序无法加载CustomControl(现在
我是的新手,我正在尝试使用在eclipse上构建一个应用程序,我遵循了一个教程,并且做了完全相同的操作,该应用程序非常简单,当我试图编译它时,我得到了一堆我甚至不理解的错误: 你能告诉我我错过了什么吗。
我正在尝试创建一个JavaFX程序,该程序从用户那里获取第一个数字和第二个数字,并根据用户选择的按钮进行加法,乘法,减法或除法,并在文本字段中显示结果。我已经创建了这些方法并正确设置了我的类,但我不确定为什么当我单击按钮时我的事件不起作用。任何类型的指导将不胜感激。我也在使用Eclipse。谢谢 主要.java Controller.java fxml.java
问题内容: 由于fxml- files使用Controller类来处理事件,因此如何混淆JavaFX应用程序?当混淆的conntroller类具有不同的名称和路径时,fxml文件将找不到它们。 混淆后编辑fxml文件不是我想要的解决方案。 还有其他选择吗? 问题答案: 没有意义重塑轮子; 快速的google搜索产生了这个网站。 它使用Proguard混淆器。