JavaFX2의 TableView 기능 "런타임에 사용자가 열을 다시 정렬합니다". 내 응용 프로그램의 특정 테이블에 대해이 기능을 비활성화하고 싶습니다.JavaFX2 TableView에서 열 순서 변경을 비활성화하는 방법은 무엇입니까?
API 문서를 보면 명백한 API 훅이 없습니다. 그러나 columns
- 속성이 있습니다. 문서에 따르면,
이 TableView의 일부인 TableColumns를 나타냅니다. 사용자가 TableView 열을 재정렬하면이 목록이 현재 시각적 순서를 반영하도록 업데이트됩니다.
변경이 발생하면 적어도 재설정을 수행 할 수 있기를 기대하면서 사실 이후 변경 사항을 재설정하기 위해 리스너를 추가하려고 시도했습니다. 내가 wasPermutated
를 요청할 때
import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
TableView tableView = new TableView();
tableView.getColumns().setAll(new TableColumn(), new TableColumn());
tableView.getColumns().addListener(new ListChangeListener() {
@Override
public void onChanged(Change change) {
if (change.wasPermutated()){
change.reset();
}
}
});
stage.setScene(new Scene(tableView));
stage.show();
}
}
그러나, 리스너는 IllegalStateException
으로 중단됩니다.
재정렬을 방지하거나 최소한 프로그래밍 방식으로 되돌릴 수 있습니까?
방금 그 방법을 시도했고 열을 이동할 때'onChanged' 메서드가 호출됩니다. 그러나 나는 change.wasPermutated()에서 IllegalStateException을 얻는다. – assylias
이 경우, 제 코드가 너무 복잡했을 것입니다. 최소한의 예를 설정하고 거기에서 계속하겠습니다. –
그냥 내 대답을 편집하고 일종의 작품. 상태를 확인하기 전에'change.next()'를 먼저 호출해야합니다. + 이동하는 열은 순열이 아닌 추가로 플래그를 설정하는 것 같습니다 ... – assylias