У меня действительно простой класс, который принимает список заданий и пытается заполнить TableView ими. У меня это работает без использования FXML, но теперь я пытаюсь использовать новые методы. У меня проблема:JavaFX TableView с SceneBuilder
tView.getItems().addAll(jobList);
возвращает нулевой указатель, однако, если я создаю новый TableView, данных в таблице вообще нет.
Я считаю, что, когда я ошибаюсь, использование TableView, которое построено в SceneBuilderand, неправильно инициализирует его, однако я смущен тем, как я это сделаю. Вот мой класс метода InterFace;
public class InterfaceMethods {
@FXML TableView<Job> tView;
@SuppressWarnings("unchecked")
public void populateTableView(Connection connection, Stage stage) throws Exception {
Parent root;
root = FXMLLoader.load(getClass().getResource("TableViewInterface.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
JobDataAccessor jobAccessor = new JobDataAccessor();
final String query = "SELECT * FROM progdb.adamJobs";
List<Job> jobList = jobAccessor.getJobList(connection, query);
//System.out.println(query);
//System.out.println(connection);
tView.getItems().addAll(jobList);
}
}
Это мой класс MainApp;
public class MainApp extends Application {
private CheckUserDetails checkDetails;
private String pString, username = System.getProperty("user.name");
private InterfaceMethods iMethods;
private Connection connection;
@FXML private Button submitButton;
@FXML private PasswordField passField;
@FXML private Label warnLabel;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("MainInterface.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
@FXML
private void loginCheck() throws Exception {
checkDetails = new CheckUserDetails();
pString = new String();
pString = passField.getText();
System.out.println(pString);
if (checkDetails.checkUserDetails(pString, username) != null) {
setConnection(checkDetails.connection);
handleTableView();
} else {
warnLabel.setVisible(true);
}
}
@FXML
public void handleTableView() throws Exception {
iMethods = new InterfaceMethods();
Stage stage = (Stage) submitButton.getScene().getWindow();
connection = getConnection();
iMethods.populateTableView(connection, stage);
}
public static void main(String[] args) {
launch(args);
}
Наконец, вот один из двух моих файлов FXML, один с TableView внутри него;
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.InterfaceMethods">
<children>
<TableView fx:id="tView" layoutX="17.0" layoutY="19.0" prefHeight="347.0" prefWidth="570.0">
<columns>
<TableColumn prefWidth="75.0" text="CaseNO." />
<TableColumn prefWidth="75.0" text="Case Notes" />
<TableColumn prefWidth="75.0" text="Date Created" />
<TableColumn prefWidth="75.0" text="Deadline" />
<TableColumn prefWidth="75.0" text="Priority" />
<TableColumn prefWidth="75.0" text="Completed" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
Метод getJobList (внутри другого класса);
public List<Job> getJobList(final Connection connection, final String query) throws SQLException {
try (Statement stmnt = connection.createStatement(); ResultSet rs = stmnt.executeQuery(query);) {
jobList = new ArrayList<>();
System.out.println(connection);
System.out.println(query);
while (rs.next()) {
caseNumber = rs.getString("CaseNO");
caseNotes = rs.getString("CaseNotes");
dateCreated = rs.getString("DateCreated");
deadlineDate = rs.getString("Deadline");
prioritySetting = rs.getInt("Priority");
completedSetting = rs.getString("Completed");
job = new Job(caseNumber, caseNotes, dateCreated, deadlineDate, prioritySetting, completedSetting);
jobList.add(job);
}
return jobList;
}
}
Файл fx: id TableView в файле FXML должен совпадать с именем в классе conrtoller, т. Е."Tableview". Не так ли, проверьте это? –
Это точно то же самое. Я также обновлю вопрос с помощью своего класса контроллера. – jbanks
расширить класс контроллера с помощью javafx.fxml.Initializableclass. – Hareesh