我有一个带有TabPanel的应用程序,其中有几个选项卡,每个选项卡都有自己的表视图。在表视图中有文件元信息。所有数据都在数据库中。现在,当我单击表格行时,应弹出一个显示文件内容的窗口。此内容也位于数据库中。 我已经测试过:
private FileTableAccessor fileTableAccessor;
@FXML private Tab fileTab;
@FXML private TableView<FileTableBean> fileTable;
@FXML private TableColumn<FileTableBean, String> fileFilename;
@FXML private TableColumn<FileTableBean, String> fileType;
@FXML private TableColumn<FileTableBean, String> fileModified;
@FXML private TableColumn<FileTableBean, Integer> fileSizeKb;
...
@Override
public void initialize(URL url, ResourceBundle rb) {
try {
setupFileTable();
} catch(SQLException e){
System.out.println(e);
}
private void setupFileTable() throws SQLException {
fileFilename.setCellValueFactory( new PropertyValueFactory<FileTableBean,String>("fileName"));
fileType.setCellValueFactory( new PropertyValueFactory<FileTableBean,String>("type"));
fileModified.setCellValueFactory( new PropertyValueFactory<FileTableBean,String>("modified"));
fileSizeKb.setCellValueFactory( new PropertyValueFactory<FileTableBean,Integer>("sizeKb"));
// Initialize database connection and fetch the data
fileTableAccessor = new FileTableAccessor();
List<FileTableBean> fileTableBeans = new ArrayList<FileTableBean>();
fileTableBeans = fileTableAccessor.getFileList();
// Store the filemap bean to dataBeans for possible later use
dataBeans.setFileTableBeans(fileTableBeans);
// Feed the data to fileTable
fileTable.getColumns().clear();
fileTable.getColumns().addAll(fileFilename, fileType, fileModified, fileSizeKb);
fileTable.getItems().addAll(fileTableBeans);
// Add "listener" for table row selection
ObservableList selectedFileTableRow = fileTable.getSelectionModel().getSelectedItems();
selectedFileTableRow.addListener(new ListChangeListener() {
@Override
public void onChanged(Change c) {
FileTableBean fileName = (FileTableBean)selectedFileTableRow.get(0);
try {
FileTextAccessor fileTextAccessor = new FileTextAccessor();
fileTextField.setText(fileName.getFileName());
ObservableList<String> fileContent = FXCollections.observableArrayList(fileTextAccessor.getFileText(fileName.getFileName()));
fileTextList.setStyle("-fx-font-family: Courier New;");
fileTextList.setItems(fileContent);
} catch (SQLException e) {
System.out.println(e);
e.printStackTrace();
}
}
});
}
简而言之,从数据库中获取单击的表格单元文件的内容,并将其显示在fileTextList ListView中。当我有一个单独的已定义ListView时,效果很好。最初的尝试是使用简单的TextArea,但是当有更大的文本文件时,它会阻塞。因此,我认为Dialog路径在这里不可用,因为弹出窗口应该具有一些环形缓冲区,用于像ListView一样流式传输数据(但是,不能100%确定Dialog是否拥有它)。除了使用某些已定义为隐藏在另一个阶段/窗口中的方法之外,还有其他更整齐的方法吗? Java版本是10,如果有任何区别,也可以使用FXML。