我正在尝试使用以下代码设置按钮文本:
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
//checking to see whether these buttons were loaded from the FXML file
assert fx_btnStart != null : "fx:id=\"fx_btnStart\" was not injected: Check your FXML file 'FX-Timer.fxml'.";
assert fx_btnStop != null : "fx:id=\"fx_btnStop\" INJECTION ERROR";
assert fx_btnHourUp != null : "fx:id=\"fx_btnHourUp\" INJECTION ERROR";
assert fx_btnHourDown != null : "fx:id=\"fx_btnHourDown\" INJECTION ERROR";
assert fx_btnMinuteUp != null : "fx:id=\"fx_btnMinuteUp\" INJECTION ERROR";
assert fx_btnMinuteDown != null : "fx:id=\"fx_btnMinuteDown\" INJECTION ERROR";
//ending of initialization of FXML elements
//set words for buttons yo.
fx_btnHourUp.setText("HELLO");
}
这是我的FXML:
<children>
<Button mnemonicParsing="false" prefHeight="53.0" prefWidth="92.0"
text="Hup" textAlignment="CENTER" alignment="CENTER" id="fx_btnHourUp"/>
<Button mnemonicParsing="false" prefHeight="37.0" prefWidth="92.0"
text="Hdown" GridPane.columnIndex="1" textAlignment="CENTER"
alignment="CENTER" id="fx_btnHourDown" />
<Button mnemonicParsing="false" prefHeight="44.0" prefWidth="92.0"
text="Mup" GridPane.columnIndex="2" textAlignment="CENTER"
alignment="CENTER" id="fx_btnMinuteUp" />
<Button mnemonicParsing="false" prefHeight="39.0" prefWidth="122.0"
text="Mdown" GridPane.columnIndex="3" textAlignment="CENTER"
alignment="CENTER" id="fx_btnMinuteDown" />
</children>
但是它不起作用我真的不明白为什么,是否有其他人知道如何使用JavaFX设置按钮文本? &GT;取代;我觉得JavaFX并不像Swing那么简单......但无论如何,任何人都知道我做错了什么?另外,有没有人知道学习FXML的任何资源我喜欢FXML而不是用Java编写它,但似乎没有太多内容,我是否喜欢世界上唯一更喜欢FXML而不是JavaFX GUI编码的人?
答案 0 :(得分:2)
为什么按钮文字不会在您的程序中更改
一个。您永远不会将您的控制器与您的FXML相关联。
由于控制器永远不会与FXML相关联,因此永远不会实例化控制器,并且永远不会运行设置按钮文本的控制器初始化代码。
湾您在FXML中的项目上设置了CSS id
而不是FXML fx:id
。
如果没有为FXML中的项目设置fx:id
,FXML不会将对这些项目的Java对象的引用注入控制器类。
首次开始编写FXML应用程序时,这些是非常常见的错误。如果您愿意,可以通过javasedocs_us@oracle.com向Oracle写信,并附上该答案的链接,并要求Oracle向their documentation添加FXML故障排除部分或常见问题部分。
将控制器与FXML关联
或者:
在您的示例中,将fx:controller属性添加到根节点; e.g。
<BorderPane fx:controller="application.FX_TimerController" ...
或者
有关如何执行此操作的信息,请参阅Passing Parameters JavaFX FXML。
设置fx:id
值
而不是:
<Button ... id="fx_btnHourUp"/>
写:
<Button ... fx:id="fx_btnHourUp"/>
答案 1 :(得分:2)
您确定您的元素实际上不是null并且您的断言语句实际上正在执行它们应该执行的操作吗?有关使用assert语句的信息,请Click me。确保您的变量声明保留为@FXML private Button fx_btnHourUp;
,并且您永远不会通过fx_btnHourUp = new Button();
自行实例化该按钮。
您是否使用SceneBuilder 2.0来创建fxmls?这是一个允许您设计fxmls同时避免许多这类常见错误的程序。 Download link here.