2016-10-07 2 views
1

javafx에서 TableView의 행 위치를 전환 할 수 있습니까?JAVAFX에서 Tableview의 셀 위치 전환

"5"행을 만들고 "UP"및 "DOWN"으로 두 개의 버튼이 있다고 가정합니다. UP 버튼을 클릭하면 선택된 특정 행을 위 방향으로 바꿀 수 있고 DOWN 버튼 사용자는 DOWN 버튼을 클릭하면 행을 아래쪽 위치로 이동할 수 있습니다. 즉, 사용자는 Button 클릭을 사용하여 선택된 특정 행을 TableView의 임의의 위치에 배치 할 수있다. javafx를 사용하면 TableView에서 가능합니까? 가능한 한 친절하게 나에게 논리를 제공하십시오.

+0

예. 항목을 테이블의 항목 목록에서 다른 위치로 옮기면됩니다. –

+0

내가 5 행을 만들고 "UP"과 "DOWN"으로 두 개의 버튼이 있다고 가정하십시오. UP 버튼 클릭시 사용자는 특정 선택된 행을 위쪽 방향으로 바꿀 수 있고 DOWN 버튼 사용자는 행을 아래쪽 위치로 움직일 수 있습니다 DOWN 버튼을 클릭하면됩니다. 즉. 사용자는 TableView의 버튼 클릭에 어떤 위치로 particlar selectyed 행을 배치 할 수 있습니다. 가능한 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