Java FX非控制器类文件

Java FX非控制器类文件,java,javafx,fxml,Java,Javafx,Fxml,我在将一些数据发送到另一个名为ValuesSubmitted.java的类文件时遇到了很大的问题,但只能从位于main Controller.java中的一个方法发送数据 我的问题是,在Controller.java类的所有其他区域中,我可以成功地在ValuesSubmitted.java类中设置和获取值,而不会出现任何问题。 ValuesSubmitted没有附加相应的FXML元素,因为ValuesSubmitted用于数据源 请遵循我的代码,因为我的评论将进一步详细解释 @FXML

我在将一些数据发送到另一个名为ValuesSubmitted.java的类文件时遇到了很大的问题,但只能从位于main Controller.java中的一个方法发送数据

我的问题是,在Controller.java类的所有其他区域中,我可以成功地在ValuesSubmitted.java类中设置和获取值,而不会出现任何问题。 ValuesSubmitted没有附加相应的FXML元素,因为ValuesSubmitted用于数据源

请遵循我的代码,因为我的评论将进一步详细解释

@FXML

    private void ResetPersonnel(){

        //Instantiating ValuesSubmitted java class
        ValuesSubmitted values = new ValuesSubmitted();

        try (Connection connection = DriverManager.getConnection(CONNECTION_STRING)) {


            //Fetching SQL DB - working as intended
            final String queryTitle = "SELECT * FROM PERSONNEL WHERE TRUCK_TYPE = '" + values.getTypeOfTruck() + "' AND TRUCK_NUMBER = '"
                                      + values.getTruckNumber() + "' AND SHIFT_COLOR = '" + values.getShiftColor()+"';";

            PreparedStatement statementTitle = connection.prepareStatement(queryTitle);

            String resultTitle;
            ResultSet resultSetTitle = statementTitle.executeQuery();
            while (resultSetTitle.next()) {

                // Each result
                resultTitle = resultSetTitle.getString("TITLE") + " " + resultSetTitle.getString("LAST_NAME");

                // THIS ADDS EACH ENTRY FOUND INTO OBSERVABLE "list" variable located in this Controller.java class.(this works.)
                list.add(resultTitle);

                // This is SUPPOSE to add each entry found into an observable list called "personnel" located in a single class file called ValuesSubmitted.java
                // ValuesSubmitted doesn't have a FXML page for it. It was intended for a data storage with all my setters and getters.
                values.setPersonnel(list);

            }

            // When I Sys-Out this line, it returns 0 upon this method being called.
            System.out.println(values.getPersonnel().size());

            // This is my ListView instance object with "list" being the variable of my observable list.
            // This populates my List view container successfully with the observable list located in Controller.java
            crewMembersList.setItems(list);

            /*
            My problem is that in all other areas of my Controller.java class I can successfully SET and GET values in my ValuesSubmitted.java class with no issues.
            Again, ValuesSubmitted not does have a corresponding FXML element attached to it, as ValuesSubmitted was intended for a data source.
             */

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }

    }
这是位于Controller.java中的另一个方法,它成功地将数据设置为ValuesSubmitted.java类

@FXML

   private void addCrewMember() {

        //TODO FIX DUPLICATE ENTRIES WITH CASE SENSITIVITY
        TextInputDialog addPersonnel = new TextInputDialog();
        addPersonnel.setTitle("Personnel Names");
        addPersonnel.setHeaderText("Enter personnel title then last name.");
        addPersonnel.setContentText("ex. \"FF Smith\"");
        Optional<String> result = addPersonnel.showAndWait();

        if (result.isPresent() && !addPersonnel.getResult().isEmpty()) {
            values.setPersonnelMembers(addPersonnel.getResult());


        }

    // This line validates that the entry above was indeed added to the list.
        System.out.println(values.getPersonnel());

    }
@FXML
私人无效添加乘员(){
//TODO修复区分大小写的重复条目
TextInputDialog addPersonal=新建TextInputDialog();
AddPersonal.setTitle(“人员姓名”);
addPersonal.setHeaderText(“输入人员头衔,然后输入姓氏”);
addPersonal.setContentText(“例如“FF Smith”);
可选结果=addPersonal.showAndWait();
if(result.isPresent()&&!addPersonal.getResult().isEmpty()){
values.setPersonnelMembers(addPerson.getResult());
}
//此行验证上述条目是否确实已添加到列表中。
System.out.println(values.getPersonal());
}
列表。添加(resultitle)

我想这是在
值提交值中分配人员列表的中间步骤,没关系。我建议先检查它的大小或打印元素


对于似乎有问题的
setPersonal(List List)
,请尝试将临时列表中的每个元素复制到
值submitted.personellist
。有一个addAll方法可以使用
java.util.ArrayList.addAll(Collection这些方法之间的区别在于,在第二个方法中
values
是一个字段,在其他用户交互过程中可能会填充该字段

在第一种方法中,创建存储在局部变量中的新实例:

ValuesSubmitted values = new ValuesSubmitted();
此实例的属性可能未初始化。加载fxml时,您可能需要将实例传递给控制器,请参阅

一件奇怪的事情是,您在每次循环迭代中传递列表。您可能应该将此语句移到循环之外:

values.setPersonnel(list);

此外,由于
list
似乎是一个重复使用的字段,因此可能需要在检索数据之前清除该字段。

您是否尝试在
循环中打印出任何内容,以确保
值。setPersonal()
是否实际被调用过?也许您的
结果集是空的?好吧,我尝试在while循环中打印,但没有打印任何内容。我刚刚发现,在我调用“values.getVariableName”的所有位置的SQL语句中它们返回null。因此我没有任何线索,因为我在该方法的顶部创建了另一个java类的实例。在没有看到您提交的
值的情况下,我们无法真正知道这是为什么。但除非您实际设置了这些值(
TypeOfTruck
TruckNumber
,等等)在构造函数中,它们将为null。至少在类实例化之后,您不会设置它们。无关:请学习java命名约定并坚持这些约定无关:请陈述您所指的内容,而不是抛出一个宽泛的句子,它无法深入理解您决定发布代码的原因谢谢,我更新了代码,只在每次迭代时将resultitle字符串添加到列表中,而不是列表本身。