2016-10-07 17 views
1

javafx内のTableViewの行位置を切り替えることは可能ですか?JAVAFXでTableviewのセル位置を切り替える

5行を作成し、「UP」と「DOWN」の2つのボタンがあるとします。 UPボタンをクリックすると、選択された特定の行を上方向にスワップすることができ、DOWNボタンの場合、DOWNボタンをクリックすると行を下方向に移動できます。ユーザは、Buttonのクリックを使用して、特定の行をTableViewの任意の位置に配置することができる。 javafxを使用してTableViewで可能ですか?可能であれば、私にそれをするための論理を親切に提供してください。

+0

はい、もちろん。アイテムをテーブルのアイテムリストの別の位置に移動するだけです。 –

+0

私は5行を作成し、 "UP"と "DOWN"の2つのボタンがあると仮定します。UPボタンをクリックすると、選択された特定の行を上方向にスワップし、DOWNボタンのユーザーは行を下向きの位置DOWNボタンをクリックすると表示されます。すなわち、ユーザーは、選択された行の中の特定の行を、TableViewのボタンをクリックすると任意の位置に置くことができます。javafxを使用してtableviewで可能ですか?もし可能なら親切に私にそれをするロジックを提供してください。 – user2715085

答えて

2

あなたは、単にこの効果を達成するためにTableViewitemsを変更することができます。

@Override 
public void start(Stage primaryStage) { 
    TableView<Item<String>> tableView = createTableView(); 

    Button upButton = new Button("Up"); 
    Button downButton = new Button("Down"); 

    ReadOnlyIntegerProperty selectedIndex = tableView.getSelectionModel().selectedIndexProperty(); 

    upButton.disableProperty().bind(selectedIndex.lessThanOrEqualTo(0)); 
    downButton.disableProperty().bind(Bindings.createBooleanBinding(() -> { 
     int index = selectedIndex.get(); 
     return index < 0 || index+1 >= tableView.getItems().size(); 
    }, selectedIndex, tableView.getItems())); 

    upButton.setOnAction(evt -> { 
     int index = tableView.getSelectionModel().getSelectedIndex(); 
     // swap items 
     tableView.getItems().add(index-1, tableView.getItems().remove(index)); 
     // select item at new position 
     tableView.getSelectionModel().clearAndSelect(index-1); 
    }); 

    downButton.setOnAction(evt -> { 
     int index = tableView.getSelectionModel().getSelectedIndex(); 
     // swap items 
     tableView.getItems().add(index+1, tableView.getItems().remove(index)); 
     // select item at new position 
     tableView.getSelectionModel().clearAndSelect(index+1); 
    }); 

    BorderPane root = new BorderPane(tableView); 
    root.setRight(new VBox(10, upButton, downButton)); 

    Scene scene = new Scene(root); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

@fabian ...私は試してみましょう..そして、論理のために多くのことをありがとう。これは私が望むものです.. – user2715085

関連する問題