【发布时间】:2017-04-21 19:19:22
【问题描述】:
使用 JavaFX 和 Scene Builder,我试图从控制器访问标签内的文本。
我在控制器中初始化了一个标签如下:
@FXML
private Label label1;
以下代码在fxml文件中:
<Label fx:id="lable1" onMouseClicked="#handleLabel" text="Label 1" />
我已经使用场景构建器将标签绑定到控制器中的这个函数:
private void handleLabel(MouseEvent event) {
// get text from label n
}
我的想法是打电话给label1.getText()。但是为此我需要获取标签的 fx:id,并且由于我会使用很多标签,因此我无法单独对所有 id 案例进行硬编码。
Better way for Getting id of the clicked Object in JavaFX controller 我找到了这个,但我认为这个答案对我不起作用,因为初始化标签和设置 id 似乎无法处理@FXML。 另外,是否可以访问组件的 fx:id 也没有得到解答。
也欢迎使用任何其他方式来访问 Label 对象的方法,例如 getText()。
【问题讨论】:
-
((Label)event.getSource()).getText()? (即使你能得到fx:id,你不能,你怎么用它来调用getText()??) -
这个想法是做 label1.getText()。由于 fx:id 是 label1,我想我可以使用 id 的名称 .getText()。但你的方法也行得通。但答案是您无法访问 fx:id 但必须找到解决方法。谢谢!
-
但是你不会有
label1(这是一个对象引用):你会有一个包含文本"label1"的String变量,这根本不是一回事。那你会怎么做? -
请注意,您的示例代码有错字,而不是
fx:id="lable1",您应该使用fx:id="label1"。也许这个错字或可能与 CSS id 混淆导致您创建了一个XY problem。 -
你说你“会有很多标签,我不能单独硬编码所有的 id 案例”,所以也许你的解决方案可能是通过循环在代码中创建标签并将它们放在 ObservableList 中而不是具有在 FXML 中定义的标签。 FXML fx:ids 是硬编码的。
标签: java user-interface javafx fxml scenebuilder