У меня есть приложение с 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, но она задыхается, когда есть большие текстовые файлы.Поэтому я предполагаю, что путь к диалогу здесь не пригоден, так как у всплывающего окна должен быть кольцевой буфер для потоковой передачи данных, как у ListView (хотя не уверен на 100%, есть ли у Dialog его).Есть ли более аккуратный способ сделать это, чем использовать какой-то уже определенный скрытый другой этап / окно?Версия Java - 10, и FXML также используется, если это имеет какое-либо значение.