我已经创建了一个简单的JavaFX程序,分别使用CSS和FXML进行样式和布局。我如何从主Java应用程序中编辑FXML中声明的节点?具体来说,我如何更改下面显示的Text
对象中的文本:
.stage {
-fx-background-color: lightskyblue ;
-fx-effect: innershadow(three-pass-box , rgba(0,0,0,0.6), 25, 0.0, 0, 1 );
}
.time {
-fx-fill: white;
-fx-font-size: 95;
-fx-font-family: 'sans-serif';
-fx-effect: dropshadow(three-pass-box , rgba(0,0,0,0.6), 2, 0.0, 0, 1 );
}
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>
<BorderPane fx:id="mainStage" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" styleClass="stage" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
<center>
<Text fx:id="time" styleClass="time" text="Text" />
</center>
<stylesheets>
<URL value="@application.css" />
</stylesheets>
</BorderPane>
public class Main extends Application {
@Override
public void start(Stage stage) {
Parent root;
try {
root = FXMLLoader.load(getClass().getResource("layout.fxml"));
Scene scene = new Scene(root, 300, 275);
stage.setTitle("FXML Welcome");
stage.setScene(scene);
stage.show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
答案 0 :(得分:1)
为FXML添加一个控制器类,并带有正确的注释:
public class MyCtrl {
@FXML private Text time; // name must be the same as fx:id
}
在FXML中声明控制器(还有其他方法,这可能是最简单的):
<BorderPane fx:id="mainStage" ... fx:controller="mypackage.MyCtrl">
然后你可以从控制器中访问它,例如来自initialize()
方法:
public void initialize() {
text.setText("xyz");
}
(您可能希望在MyCtrl.initialize()
设置一个计时器,定期使用当前时间调用setText()
。)