4

本日JavaFX 2.0でtableViewのカスタムクラスを作成せずにCSVからDATファイルのデータを表示するデモです。テーブルビューは列と行を自動的に管理するため、このテーブルビューを動的テーブルビューと呼びます。
tableView での編集可能に関する私の調査では、カスタム クラスが必要であり、それを tableView に実装して、このデモとして表示する必要があります ==> http://docs.oracle.com/javafx/2/ui_controls/table-view.htm

しかし、この場合、csvファイルまたは.datファイルで列の例がいくつかわからないため、できません....この場合、TextFieldをTableCellに追加して、このtableViewで編集可能にしたいと考えています。カスタムクラスを作成せずにどのようにしますか(列の数がないため...)、カスタムクラスを作成する必要がある場合、この場合のカスタムクラスの設計はどうですか?

手伝っていただけませんか?

    private void getDataDetailWithDynamic() {
    tblView.getItems().clear();
    tblView.getColumns().clear();
    tblView.setPlaceholder(new Label("Loading..."));
        //            @Override



            try {
                File aFile = new File(txtFilePath.getText());
                InputStream is = new BufferedInputStream(new FileInputStream(aFile));
                Reader reader = new InputStreamReader(is, "UTF-8");

                BufferedReader in = new BufferedReader(reader);

                final String headerLine = in.readLine();
                final String[] headerValues = headerLine.split("\t");
                        for (int column = 0; column < headerValues.length; column++) {
                            tblView.getColumns().add(
                                    createColumn(column, headerValues[column]));
                        }

                // Data:

                String dataLine;
                while ((dataLine = in.readLine()) != null) {
                    final String[] dataValues = dataLine.split("\t");
                            // Add additional columns if necessary:
                            for (int columnIndex = tblView.getColumns().size(); columnIndex < dataValues.length; columnIndex++) {
                                tblView.getColumns().add(createColumn(columnIndex, ""));
                            }
                            // Add data to table:
                            ObservableList<StringProperty> data = FXCollections
                                    .observableArrayList();
                            for (String value : dataValues) {
                                data.add(new SimpleStringProperty(value));
                            }
                            tblView.getItems().add(data);
                }
            } catch (Exception ex) {
                System.out.println("ex: " + ex.toString());
            }


    for(int i=0; i<tblView.getColumns().size(); i++) {
        TableColumn col = (TableColumn)tblView.getColumns().get(i);
        col.setPrefWidth(70);
    }
}

private TableColumn createColumn(
        final int columnIndex, String columnTitle) {
    TableColumn column = new TableColumn(DefaultVars.BLANK_CHARACTER);
    String title;
    if (columnTitle == null || columnTitle.trim().length() == 0) {
        title = "Column " + (columnIndex + 1);
    } else {
        title = columnTitle;
    }


            Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell>() {
                @Override
                public TableCell call(TableColumn p) {

                    System.out.println("event cell");
                    EditingCellData cellExtend = new EditingCellData();
                    return cellExtend;
                }
            };

    column.setText(title);
    column.setCellValueFactory(cellFactory);
    return column;
}

お読みいただきありがとうございます。

4

1 に答える 1

-1

これが解決する最善の方法です ==> https://forums.oracle.com/message/11216643#11216643

そこまで読んでくれて本当にありがとう。

ありがとう

于 2013-10-04T03:16:16.847 に答える