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

JavaFX从SQL查询填充组合框

苗运珧
2023-03-14

我正在查询Sql Server并返回一个List-我想使用此List作为我的组合框的源。下面是我正在使用的代码,它运行时没有错误,但我的组合框始终为空并且从不填充。这里有什么不正确的?

public class Controller {
    private List<String> combomain;
    static String getData = "QueryHEre";

    void initialize() {
        empnames = queryDatabase(getData);
        String[] names = empnames.toArray(new String[0]);

        combomain.getItems().addAll(names);
        combomain.setValue("");
    }

主要的Java语言

public void start(Stage primaryStage) throws Exception{
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("Hello World");
    primaryStage.setScene(new Scene(root, 350, 275));
    primaryStage.show();
}

样品fxml

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="399.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <FlowPane hgap="10.0" layoutX="14.0" layoutY="7.0" prefHeight="30.0" prefWidth="375.0">
         <children>
            <Label alignment="CENTER_RIGHT" prefHeight="17.0" prefWidth="79.0" text="Employee:" />
            <ComboBox id="combomain" fx:id="combomain" prefWidth="150.0" />
            <Button mnemonicParsing="false" prefHeight="27.0" prefWidth="80.0" text="Get Info" />
         </children>
      </FlowPane>
   </children>
</Pane>

共有1个答案

冀翰翮
2023-03-14

您确定代码运行时没有错误吗?您将comomain定义为列表

请注意,在前面的示例中,控制器成员字段和事件处理程序方法被声明为public,以便加载程序可以设置或调用它们。实际上,这通常不是问题,因为控制器通常只对创建它的FXML加载程序可见。然而,对于那些更喜欢控制器字段或处理程序方法的受限可见性的开发人员来说,javafx。fxml。可以使用FXML注释。此注释将受保护或私有类成员标记为FXML可以访问。如果要注释的类位于命名模块中,则包含该类的模块必须至少向javafx打开包含该类的包。fxml模块。

由于您的初始化方法不是public,因此必须使用@FXML对其进行注释,以便被FXMLLoader看到和调用。与您的comomain字段相同;尽管在FXML文件中具有适当的fx: id,但它不会被注入,因为该字段是私有并且没有用@FXML进行注释。

您的控制器应该如下所示:

public class Controller {

    @FXML
    private ComboBox<String> combomain;
    static String getData = "QueryHEre";

    @FXML
    void initialize() {
        empnames = queryDatabase(getData);
        String[] names = empnames.toArray(new String[0]);

        combomain.getItems().addAll(names);
        combomain.setValue("");
    }

}

然而,即使修复了所有这些问题,这仍然不起作用,因为您尚未将控制器类链接到FXML文件。如前一节FXML简介中所述,实现此目的的一种方法是在FXML文件的根元素中指定fx:controller属性:

<!-- SOME ATTRIBUTES OMITTED FOR BREVITY -->
<Pane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" 
      fx:controller="sample.Controller">
    <!-- OMITTED FOR BREVITY -->
</Pane>

其中<代码>示例。控制器应替换为控制器类的完全限定名称。如果使用的是场景生成器,则可以通过打开“文档”部分(左面板)中标题为“控制器”的窗格来设置控制器。

 类似资料:
  • 我想在一个组合框中填充一些数据。这很好。但是,我想动态地改变组合框中的数据。 目前我有一个表,在组合框中,我在表列中显示数据的唯一值。现在,表数据存储在静态可观察列表变量中。我想根据表中显示的数据更改组合框中的数据。也就是说,如果存储表数据的静态可观察列表发生更改,我希望在没有手动干预的情况下更改组合框数据。 如果没有单独的静态变量用于组合框,这是否可能?

  • 我无法填充从场景生成器创建的JavaFX组合框。虽然我已经搜索过了,但我找不到解决这个错误的方法。 下面的例子都不管用。 帮助将不胜感激。

  • 我看到了许多类似问题的答案,人们说为了获得组合框中加载的项目的值,需要使用 但这种东西不起作用…… 这是我所拥有的…… 我从表中选择了Code1和Code2,我希望能够显示Code1,当被选中时,我希望能有Code2的值,但对于displayMember和ValueMember,我看不到任何结果。 编辑:这是我的所有代码: 暗淡的行=dt. Load(com. Ex 错误提示:表达式不产生值 编辑

  • 我有一个简单的SOQL查询,它返回与联系人和活动成员相关的信息。我试图用SOQL查询的结果填充一个自定义对象。但是,在加载Visualforce页面时,我遇到以下错误: 无效的字段活动。活动成员名称 我已经在开发人员控制台中单独运行了SOQL查询,它成功地进行了查询。为什么我不能参加竞选呢。for循环中SOQL查询的名称?

  • 我试图避免将一大堆数字硬编码到我的JavaFX ComboBox中,但我不知道有任何其他方法可以做到这一点。目前我正在这样做: 然而,我的目标是调用一个方法,该方法将生成一个达到某个指定上限(例如50)的数字列表。我尝试了以下方法,但它只是添加了最后一个,而不是全部50:

  • 问题内容: 我有要查询的模型(称为“活动”)(使用Mongoose)。他们的架构如下所示: 当我询问他们,我填充,,,和字段(所有引用)。在那之后,我也深入了这个领域。这是我的查询代码: 这已经是一个相对复杂的查询,但是我需要做更多。如果它碰到了声明的一部分,我 还 需要确保的字段等于字符串。我尝试使用,但是由于必须先填充事件,因此无法查询其任何字段。我还需要在其他多个查询中实现相同的目标。 如我