JavaFX学習のTable View

8446 ワード

Table Viewテーブル
Table Column列
テーブルの構築には、主にTableView、TableColumn、ObservableList、Beanがあります.
列tableを追加します.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
ObservableListに格納されているデータ
table.setItems(observableList);データの追加
observableListには通常、格納されたBeanがあり、列とBeanとの間に連絡を取り、値を取得します.
カラムとBeanの間の連絡先:
emailCol.setCellValueFactory(new PropertyValueFactory("email"));cell値ファクトリを介してBeanとの連絡を確立します.ここでは、Beanが何を伝えたのかを知る必要はありません.「email」でgetEmail()メソッドに反射してBeanに値を取得するだけです.したがって、Beanプロパティ定義の名前は同じではなく、getEmail()メソッドが必要です.

firstNameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<Person, String> arg0) {		
// return new
// SimpleStringProperty(arg0.getValue(),"sd",arg0.getValue().getFirstName());
// //bean, bean , 
return new SimpleStringProperty(arg0.getValue().getFirstName()); 
//  。
	}
});

arg0.getValue()はここのpersonに等しい.もしあなたがadd(list)、arg 0.getValue()はlistに等しい.
SimpleStringProperty(arg0.getValue(),"sd",arg0.getValue().getFirstName());
ここでの意味はarg 0である.getValue()はあなたのobservableListです.addの値、「sd」はbeanが名前を取得し、arg 0.getValue().getFirstName()は、カラムが取得したい値です.listの場合arg 0.getValue().get(j)は、その列の各行に値を付与する.
cellには文字だけでなく、他のノードも保存できます.

firstNameCol.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
	@Override
	public TableCell<Person, String> call( //  
	TableColumn<Person, String> arg0) {
	   return new TableCell<Person, String>() {			     @Override
	     protected void updateItem(final String str,boolean arg1) {	     
              super.updateItem(str, arg1);
	     if (arg1) {							setText(null);
		setGraphic(null);
	      else {						         setText(str);
                  setGraphic(new CheckBox());
	    }
          }
       }
});

TreeCellと同様に、cellの中を再構築することができます.
lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());いくつかのデフォルトの構造があり、自分でnew Table Cellに行く必要はありません.
Table Column sortを設定する3つの方法
firstNameCol.setSortNode(new Text("a"));//デフォルトは、ヘッダー上の小さなアイコンの三角形で、変更できます.
firstNameCol.setSortable(true);//ソート可能な設定
firstNameCol.setSortType(SortType.DESCENDING);昇降順の設定
1つのcolumnに複数のcolumnを含めるには、Table ColumnのgetColumns()を呼び出すことができる.setAll(TableColumn...);

        firstNameColumn = new TableColumn<Person, String>("First");
        firstNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName"));
//        firstNameColumn.setCellFactory(TextFieldCellFactory.<Person>forTableColumn());

        lastNameColumn = new TableColumn<Person, String>("Last");
        lastNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName"));
//        lastNameColumn.setCellFactory(TextFieldCellFactory.<Person>forTableColumn());

        nameColumn = new TableColumn<Person, String>("Name");
        nameColumn.getColumns().setAll(firstNameColumn, lastNameColumn);

tableのユニット間には明らかな横線分割があり,cssで取り除くことができる.
横線を引く

.table-view .table-row-cell {
    -fx-background-insets: 0;
}

データのない縦線を同時に取り除くには

.table-row-cell:empty .table-cell {
    -fx-border-width: 0px;
}

行を操作するにはsetRowFactoryを使用します.次のように行のダブルクリックを行います.

 tableView.setRowFactory(new Callback<TableView<T>, TableRow<T>>() {
            @Override
            public TableRow<T> call(TableView<T> param) {
                return new TableRowControl();
            }
        });
class TableRowControl extends TableRow<T> {

        public TableRowControl() {
            super();
            this.setOnMouseClicked(new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent event) {
                    if (event.getButton().equals(MouseButton.PRIMARY)
                            && event.getClickCount() == 2
                            && TableRowControl.this.getIndex() < tableView.getItems().size()) {
                          //doSomething
                    }
                }
            });
        }
    }

tableにデータを挿入して、tableの中のデータは表示して、あなたのitemlistから来たので、listの中のデータはどんな順序を並べて、それではtableもどんな順序を並べます.新しいデータを追加すると、リストに直接追加します.リストはまた位置による加算を提供し、tableは位置による加算を表示します.

 tableView.getItems().add(selectedRow, newRecord);

新レコードは新しいオブジェクトで、値が割り当てられていません.
カスタムTableセルは一般的にupdateItemメソッドを書き換える.編集操作が必要な場合はstartEdit,cancelEditを書き換えることができます

  @Override
        public void startEdit() {    
            if (!this.getTableRow().isVisible()) {
                return;
            }
            super.startEdit();

            if (checkBox == null) {
                createCheckBox();
            }
            setText(null);
            setGraphic(checkBox);
        }

        @Override
        public void cancelEdit() {
            super.cancelEdit();
            setText(getItem().toString());
            setGraphic(null);
        }

編集状態をクリックすると、Cellの内容が変更されることがわかります.編集を離れると元cellの内容に変わります.これにより、表示される文字列が文字列になり、編集時にカレンダーなどのコントロールができます.
選択したTable Columnの取得

table.getSelectionModel().getSelectedCells().get(0).getTableColumn()

table独自の方法でcolumnをフィルタリングできます.つまり、どのcolumnだけを表示しますか.

table.setTableMenuButtonVisible(true);

trueに設定すると、columnをフィルタできるプラス記号のcolumnが表示されます.
tableのデフォルトでは1行しか選択できませんが、複数行を選択したい場合はSelectionModeを設定し、選択した複数をリスニングできます.

 ListChangeListener<Person> indicesListener = new   ListChangeListener<Person>() {
            @Override public void onChanged(Change<? extends Person> c) {
                while (c.next()) {
                	
                    selectionUpdated(c.getAddedSubList(), c.getRemoved());
                }
            }
        };
        tableView.getSelectionModel().getSelectedItems().addListener(indicesListener);
        tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

tableView.getSelectionModel()は、2つのサブクラスMultipleSelectionModel、SingleSelectionModelを有する抽象クラスSelectionModelを得る.これらは主に選択イベントを処理し、それらの方法を見ることができます.

getSelectedIndex() 
getSelectedItem() 
selectedIndexProperty() 
selectedItemProperty() 

選択したitemとインデックスを取得します.1つはその値を取得することであり,もう1つはbind変化のためのパッケージ属性を取得することである.

select(int index) 
select(T obj) 
selectFirst() 
selectLast() 
...
clearSelection() 
clearSelection(int index) 

これらの方法はすべて操作選択です.

setSelectionMode(SelectionMode.MULTIPLE);
selectIndices(int index, int... indices) 
selectRange(int start, int end) 

MultipleSelectionModelは、複数選択機能を提供し、複数選択のいくつかの方法を提供します.

select(int row, TableColumn<S,?> column) 
selectAboveCell() 
selectBelowCell()
selectLeftCell() 
selectRightCell()  
setCellSelectionEnabled(boolean value) 

TableView.TableViewSelectionModelはMultipleSelectionModelを継承しており、主にtableの選択イベントに対していくつかの方法を提供しています.
ここにjavafxの小さいゲームがたくさんあって、1人の達人が書いたのです
http://lustrezhang.gotoip4.com/fxgame/
ここにjavafxが勉強している中国語のウェブサイトがあります.私は内容をその上に捨てました.
http://www.jfxee.com/