【发布时间】:2021-06-07 22:40:54
【问题描述】:
我是 Java 和 JavaFX 的新手。我已经使用 SceneBuilder/FXML 创建了一个 JavaFX 项目,并且我试图在程序开始时添加一个实时时钟,该时钟在屏幕顶部的整个程序中运行。我创建了一个文本区域并尝试从给定的代码中添加时钟功能,但每次启动程序时,它总是显示为空白。即使尝试手动使用 .setText("string") 函数也不起作用,所以我认为我将代码放在错误的位置。如果可能的话,有人能告诉我这段代码应该去哪里或指向正确的方向吗?
这是我的主要内容:
package application;
import java.lang.ModuleLayer.Controller;
import java.util.Date;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
public class Main extends Application {
public static Stage stage = null;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/Ui.fxml"));
Scene scene = new Scene(root);
stage.initStyle(StageStyle.UNDECORATED);
stage.setScene(scene);
this.stage = stage;
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是我的控制器代码:
package application;
import java.util.Date;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.TextArea;
public class UiController {
@FXML
private TextArea clockTextArea;
@FXML
private TextArea transactionLog;
@FXML
private TextField recipentField;
@FXML
private Button payButton;
@FXML
private Button requestButton;
@FXML
private TextField commentField;
private void refreshClock()
{
Thread refreshClock = new Thread()
{
public void run()
{
while (true)
{
Date dte = new Date();
String topMenuStr = " " + dte.toString();
clockTextArea.setText(topMenuStr);
try
{
sleep(3000L);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} // end while ( true )
} // end run thread
};
refreshClock.start();
}
public void initialize() {
TextArea clockTextArea = new TextArea();
refreshClock();
}
}
【问题讨论】:
-
您无法从后台线程更新 UI。
-
hmm ...这看起来与stackoverflow.com/questions/66540928/… 非常相似(包括我评论过的错误)-您是否创建了一个新帐户来重新发布?如果是这样,请不要 - 而是编辑以前的内容以使其可回答。至少,修复已经发现的错误..顺便说一句:创建一个本地文本字段并且不以任何方式使用它(初始化)是..没用的。
标签: java javafx textarea fxml scenebuilder