JavaFX:单击tableView单元格时弹出listView

时间:2018-09-20 12:26:04

标签: listview javafx dialog popup tableview

我有一个带有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。

0 个答案:

没有答案