gpt4 book ai didi

java - 检测 TableView JavaFX 行上的双击

转载 作者:IT老高 更新时间:2023-10-28 20:33:00 34 4
gpt4 key购买 nike

我需要检测对 TableView 的一行的双击。

如何监听该行任何部分的双击并获取该行的所有数据以将其打印到控制台?

最佳答案

TableView<MyType> table = new TableView<>();

//...

table.setRowFactory( tv -> {
TableRow<MyType> row = new TableRow<>();
row.setOnMouseClicked(event -> {
if (event.getClickCount() == 2 && (! row.isEmpty()) ) {
MyType rowData = row.getItem();
System.out.println(rowData);
}
});
return row ;
});

这是一个完整的工作示例:

import java.util.Random;
import java.util.function.Function;

import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

public class TableViewDoubleClickOnRow extends Application {

@Override
public void start(Stage primaryStage) {
TableView<Item> table = new TableView<>();
table.setRowFactory(tv -> {
TableRow<Item> row = new TableRow<>();
row.setOnMouseClicked(event -> {
if (event.getClickCount() == 2 && (! row.isEmpty()) ) {
Item rowData = row.getItem();
System.out.println("Double click on: "+rowData.getName());
}
});
return row ;
});
table.getColumns().add(column("Item", Item::nameProperty));
table.getColumns().add(column("Value", Item::valueProperty));

Random rng = new Random();
for (int i = 1 ; i <= 50 ; i++) {
table.getItems().add(new Item("Item "+i, rng.nextInt(1000)));
}

Scene scene = new Scene(table);
primaryStage.setScene(scene);
primaryStage.show();
}

private static <S,T> TableColumn<S,T> column(String title, Function<S, ObservableValue<T>> property) {
TableColumn<S,T> col = new TableColumn<>(title);
col.setCellValueFactory(cellData -> property.apply(cellData.getValue()));
return col ;
}

public static class Item {
private final StringProperty name = new SimpleStringProperty();
private final IntegerProperty value = new SimpleIntegerProperty();

public Item(String name, int value) {
setName(name);
setValue(value);
}

public StringProperty nameProperty() {
return name ;
}

public final String getName() {
return nameProperty().get();
}

public final void setName(String name) {
nameProperty().set(name);
}

public IntegerProperty valueProperty() {
return value ;
}

public final int getValue() {
return valueProperty().get();
}

public final void setValue(int value) {
valueProperty().set(value);
}
}

public static void main(String[] args) {
launch(args);
}
}

关于java - 检测 TableView JavaFX 行上的双击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26563390/

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