gpt4 book ai didi

JavaFX TableView 单击标题

转载 作者:行者123 更新时间:2023-11-29 04:34:12 25 4
gpt4 key购买 nike

有没有办法让鼠标点击表格的标题?

为什么我需要这个?

我有一个包含许多列的表格。但只有整个表格的特定宽度。为了避免滚动,我想给每个列一个特定的宽度(50 左右),只要你点击一个标题,这个列就会展开,这样你就可以阅读内容了。如果您单击另一个标题,则前一个标题会折叠。

希望有人能帮助我:)

最佳答案

不幸的是,没有一个很好的方法来做到这一点。唯一的公共(public) 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("");
}

关于JavaFX TableView 单击标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com