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