1

テーブル ビューを使用してクライアント サーバー Java FX アプリケーションを作成しています。サーバー側にデータベースがあり、クライアントからテーブル列とテーブルレコードをデータベースからテーブルビューに動的にロードしたいと考えています。これまでのところ、これを成功させる方法について多くのヒントを見つけました。問題は、チェックボックスである「選択」列をテーブルに追加したいということです。以下は私のコードです。

private void AddToTableRecordsFromDB(TabPane tp){
    tableview = (TableView) tp.lookup("#table");
    ObservableList<Object> data = null;
    try {
        String[] columnNames = (String[]) Login.Login.in.readObject();
        ArrayList<ArrayList> al = (ArrayList<ArrayList>) Login.Login.in.readObject();
        /**********************************
         * TABLE COLUMN ADDED DYNAMICALLY *
         **********************************/
                TableColumn select = new TableColumn("Select");
                select.setCellValueFactory(new PropertyValueFactory("invited"));
                select.setCellFactory(new Callback<TableColumn<ObservableValue, Boolean>, TableCell<ObservableValue, Boolean>>() {

                    public TableCell<ObservableValue, Boolean> call(TableColumn<ObservableValue, Boolean> p) {
                        return new CheckBoxTableCell<ObservableValue, Boolean>();
                    }
                });
                tableview.getColumns().add(select);

        for(int i=0 ; i<columnNames.length; i++){
            //use non property style for making dynamic table
            final int j = i;  
            TableColumn col;
                col = new TableColumn(columnNames[i]);
                col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){                   
                    @Override
                    public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {                                                                                             
                        return new SimpleStringProperty(param.getValue().get(j).toString());                     
                    }                   
                });                  

            tableview.getColumns().add(col);
        }
        /********************************
         * Data added to ObservableList *
         ********************************/
        data = FXCollections.observableArrayList();

        for(int i=0 ; i<al.size(); i++){
            ObservableList<ArrayList> row = FXCollections.observableArrayList(al.get(i));
            data.add(row);
        }
        //FINALLY ADDED TO TableView
        tableview.setItems(data);

    } catch (IOException | ClassNotFoundException ex) {
        Logger.getLogger(Developer_Main.class.getName()).log(Level.SEVERE, null, ex);
    } 

}

JavaFX2.0 Ensemble から CheckBoxTableCell クラスを取得しました。データベースはテーブル ビューに正常に読み込まれ、「選択」列も作成されますが、行にチェック ボックスが表示されません。

何か助けてください?

4

1 に答える 1

0

「非プロパティスタイル」を使用して列を動的に追加し、テーブルビューはリストアイテムのリストで構成されていると言います。getInvited()それらのデータ構造モデルにはメソッドがないと思います。ただしselect.setCellValueFactory(new PropertyValueFactory("invited"));、テーブルの列を設定すると、そのメソッドが検索されます。セル値ファクトリを有効な値で設定します。

EDIT:私はテストしませんでしたが、以下のコードを試してみてください。

select.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
    public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> p) {
        return new SimpleStringProperty(p.getValue().get(0).toString());
    }
});

に注意してくださいget(0)readObject()つまり、少なくとも 1 つのアイテムを返すとよいでしょう。もう1つの注意点は、双方向CheckBoxTableCellに返しObservableProperty<Boolean>てバインドするコールバックが必要であるため、データモデルに関して、チェックボックスを含む独自のセルファクトリを実装することをお勧めします。

于 2012-12-17T12:49:48.367 に答える