使用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案例。
在JavaFX控制器中获取单击对象id的更好方法我发现了这个,但我认为这个答案对我不适用,因为初始化标签和设置id似乎无法处理@FXML。此外,还没有回答是否可以访问组件的fx:id。
也欢迎使用任何其他方法来访问Label对象的方法,例如getText()
。
现在还不清楚如果你能得到它,你会用fx:id做什么。它只是引用标签的变量名称,因此它不是标签本身的一部分。即使你得到了这个名字,大概是一个字符串,你会怎么做?
您可以使用event.getSource()
获取对事件源的引用,并且假设您只将此方法注册为Label
s的处理程序,然后您可以将其向下转换为Label
:
private void handleLabel(MouseEvent event) {
Label label = (Label) event.getSource();
String labelText = label.getText();
System.out.println("Mouse click on label: "+labelText);
}
一般来说,我发现为每个控件使用不同的处理程序要好得多,而不是使用一个单独的处理程序来检查这样的事件源。显然,如果您使用FXML,这会变得非常重复(但对于大量控件使用FXML已经是重复的)。最好用Java而不是FXML(或者至少是UI中具有所有这些标签的部分)来实现这一点。然后,您可以为每个处理程序注册不同的处理程序,而无需重复代码:
VBox lotsOfLabels = new VBox();
for (int i = 1 ; i <= 100; i++) {
Label label = new Label("Label "+i);
lotsOfLabels.getChildren().add(label);
label.setOnMouseClicked(e -> {
System.out.println("Mouse click on "+label.getText());
// etc...
});
}
如果将该代码与创建100个标签的FXML进行比较(甚至不处理事件处理程序),很明显,将Java用于这样的UI比使用FXML要简单得多。当然,您可以创建一个子类VBox,它做同样的事情,如果您想在FXML中引用其余的类,只需从FXML文件中引用该类。
问题内容: 有没有办法从AngularJS中的当前$ scope中获取控制器名称? 问题答案: 不,不可能。如果属于指令怎么办?没有属性可以检索有关该范围所属的控制器的信息。
问题内容: 我正在做漂亮的汤。我有一个html字符串: 我如何检索“获取此”,而忽略“ 忽略此 ” 谢谢 问题答案: 您可以获取文本,而不必递归检索子文本: 这与文本相对于孩子的位置无关:
问题内容: 在某些情况下,我必须从标记中获取文本,例如- 输入标签中的文本是一些说 但是当我使用时,它什么也不会返回。 无论如何,我可以从标签中获取文本吗? 问题答案: 您可以使用以下任何一种: 让我知道这是否没有帮助。
问题内容: 我正在尝试在特定标签内获取文本。所以,如果我有: 我希望能够检索文本。 我正在尝试使用正则表达式。如果保持不变,我可以做到,但事实并非如此。 到目前为止,我有这个: 我认为最后两个部分-可以-但我不知道第一部分要做什么。 问题答案: 正如他们所说的,不要使用正则表达式来解析HTML。如果您知道这些缺点,则可以摆脱它。尝试 将遍历字符串中的所有匹配项。 它不会处理嵌套标签,并且会忽略标签
问题内容: 是否可以通过Chrome的控制台找到元素的控制器?我可以通过在“ 元素面板”中 选择 元素 并使用来获得对该组件的引用 有一个属性(看起来像一个构造函数),但是我不确定该怎么做。有什么办法可以从这里找到控制器的名称吗? 问题答案: 如果您只是这样做(如果您安装了Batarang Chrome扩展程序),则应该能够访问所选元素的作用域的功能和属性。这还应包括控制器在示波器上公开的所有功能
问题内容: 我需要一种方法来遍历AngularJS表单的注册控件。本质上,我试图获取所有的$ dirty控件,但是没有控件数组(FormController除了包含控件本身以外,还具有许多不同的属性/函数-每个控件都是自己的对象)。 我一直在查看源代码,并且看到FormController中有一个数组正是我要查找的数组。有没有一种方法可以访问此值,或者扩展FormController使其包含返回此