当前位置: 首页 > 知识库问答 >
问题:

从标签获取fx: id单击以从控制器获取其文本

宋稳
2023-03-14

使用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()

共有1个答案

解河
2023-03-14

现在还不清楚如果你能得到它,你会用fx:id做什么。它只是引用标签的变量名称,因此它不是标签本身的一部分。即使你得到了这个名字,大概是一个字符串,你会怎么做?

您可以使用event.getSource()获取对事件源的引用,并且假设您只将此方法注册为Labels的处理程序,然后您可以将其向下转换为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使其包含返回此