표 머리글을 마우스로 클릭하는 방법이 있습니까?JavaFX TableView 머리글 클릭
왜 내가 필요한가?
많은 열이 포함 된 표가 있습니다. 그러나 표 전체에 대해서만 구체적입니다. 스크롤을 피하려면 각 열에 특정 너비 (50 정도)를 지정하고 머리글을 클릭하기 만하면이 열이 확장되어 내용을 읽을 수 있습니다. 다른 헤더를 클릭하면 이전 헤더가 축소됩니다.
희망 누군가가 나를 도울 수 :
표 머리글을 마우스로 클릭하는 방법이 있습니까?JavaFX TableView 머리글 클릭
왜 내가 필요한가?
많은 열이 포함 된 표가 있습니다. 그러나 표 전체에 대해서만 구체적입니다. 스크롤을 피하려면 각 열에 특정 너비 (50 정도)를 지정하고 머리글을 클릭하기 만하면이 열이 확장되어 내용을 읽을 수 있습니다. 다른 헤더를 클릭하면 이전 헤더가 축소됩니다.
희망 누군가가 나를 도울 수 :
을 불행하게도이 작업을 수행 할 수있는 좋은 방법이 아니다. 유일한 공개 API 옵션은 열의 "그래픽"을 자신의 레이블로 바꾸고 그 위에 마우스 수신기를 추가하는 것입니다. 이 기능을 사용하려면 기존 열 텍스트를 지워야합니다. 기본적으로 열을 정렬 구현하는 청취자를 클릭하여이
주, 당신이 또한 column.setSortable(false)
@Override
public void start(Stage primaryStage) throws Exception {
TableView<String> tableView = new TableView<>();
TableColumn<String, Object> x = new TableColumn<>("x");
tableView.getColumns().add(x);
TableColumn<String, Object> y = new TableColumn<>("");
tableView.getColumns().add(y);
x.setSortable(false);
y.setSortable(false);
makeHeader(x, "X", 0);
makeHeader(y, "Y", 1);
EventHandler<? super MouseEvent> handler = event -> {
System.out.println("Column clicked " + ((Node)event.getTarget()).getProperties().get("index"));
};
x.getGraphic().addEventFilter(MouseEvent.MOUSE_CLICKED, handler);
y.getGraphic().addEventFilter(MouseEvent.MOUSE_CLICKED, handler);
primaryStage.setScene(new Scene(tableView));
primaryStage.show();
}
private void makeHeader(TableColumn<?, ?> target, String name, int index) {
VBox vBox = new VBox(new Label(name));
vBox.setAlignment(Pos.CENTER);
vBox.getProperties().put("index", index);
target.setGraphic(vBox);
target.setText("");
}
// Step 1: Add a click listener to the table view.
tableView.setOnMouseClicked(new EventHandler<>() {
@Override
public void handle(MouseEvent event) {
// Step 2: Get the height of the header.
double headerHeight = tableView.lookup(".column-header-background").getBoundsInLocal().getHeight();
// Step 3: Check if the clicked position's Y value is less than or equal to the height of the header.
if (headerHeight <= event.getY()) {
// Clicked on the header!
}
}
});
밤은 좋은를 호출해야하므로,이 동작을하지 않을 것 같다,하지만 작동합니다 . 유일한 문제는 지금 모든 열에 대해 이벤트를 만들고 싶지 않다는 것입니다. 이벤트 내부에서 열 인덱스를 가져올 수 있습니까? "X 클릭 한"대신 뭔가가 필요합니다 .getIndex() + "클릭 한". – Hesk
@Hesk 업데이트 된 답변보기. 나는 모든 노드가 가진 사용자 정의 속성 맵에 인덱스를 저장하고 공유 이벤트 핸들러에서 검색했습니다. – Adam
다른 방법으로 테이블을 디자인했습니다. 지금 사용 : http://stackoverflow.com/questions/27739833/adapt-tableview-menu-button (Post vom Balage1551 게시) – Hesk