Java TableView-查找单行中选定的单元格数
我有一个5列4行的表视图。如果我从其中一行中选择两个单元格,我如何才能找到该值(即一行中选择的单元格数) 我可以使用Java TableView-查找单行中选定的单元格数,java,javafx,tableview,Java,Javafx,Tableview,我有一个5列4行的表视图。如果我从其中一行中选择两个单元格,我如何才能找到该值(即一行中选择的单元格数) 我可以使用 table.getFocusModel().getFocusedCell() 所选行数 table.getSelectionModel().getSelectedItems().size() 在哪里 table = new TableView(...) 您只需使用table.getSelectionModel().getSelectedCells()即可获得所有选定Tabl
table.getFocusModel().getFocusedCell()
所选行数
table.getSelectionModel().getSelectedItems().size()
在哪里
table = new TableView(...)
您只需使用
table.getSelectionModel().getSelectedCells()
即可获得所有选定TablePosition
s的列表。对于每个TablePosition
,getRow()
会告诉您它在哪一行,所以您可以按行计算
例如:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.function.Function;
import java.util.stream.IntStream;
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.collections.ListChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class TableViewCountSelectedCellsByRow extends Application {
@Override
public void start(Stage primaryStage) {
TableView<Item> table = new TableView<>();
table.getColumns().addAll(Arrays.asList(
createCol("Name", Item::nameProperty),
createCol("Value", Item::valueProperty)
));
final int numItems = 100 ;
final Random rng = new Random();
IntStream.rangeClosed(1, numItems)
.mapToObj(i -> new Item("Item "+i, rng.nextInt(20)))
.forEach(table.getItems()::add);
table.getSelectionModel().setCellSelectionEnabled(true);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().getSelectedCells().addListener((ListChangeListener.Change<? extends TablePosition> c) -> {
// table.getSelectionModel().getSelectedCells() returns a list of all selected TablePositions
// Just iterate through it and count up cells by row
Map<Integer, Integer> selectedCellCountByRow = new HashMap<>();
table.getSelectionModel().getSelectedCells().forEach( p ->
selectedCellCountByRow.merge(p.getRow(), 1, Integer::sum));
// Display all row counts:
selectedCellCountByRow.keySet().stream().sorted(Integer::compare).forEach( r ->
System.out.println("Row " + r + " has "+selectedCellCountByRow.get(r)+" cells selected"));
System.out.println();
});
BorderPane root = new BorderPane(table);
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
public static <S,T> TableColumn<S,T> createCol(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 final StringProperty nameProperty() {
return this.name;
}
public final String getName() {
return this.nameProperty().get();
}
public final void setName(final String name) {
this.nameProperty().set(name);
}
public final IntegerProperty valueProperty() {
return this.value;
}
public final int getValue() {
return this.valueProperty().get();
}
public final void setValue(final int value) {
this.valueProperty().set(value);
}
@Override
public String toString() {
return getName();
}
}
public static void main(String[] args) {
launch(args);
}
}
导入java.util.array;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Random;
导入java.util.function.function;
导入java.util.stream.IntStream;
导入javafx.application.application;
导入javafx.beans.property.IntegerProperty;
导入javafx.beans.property.SimpleIntegerProperty;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.beans.property.StringProperty;
导入javafx.beans.value.observeValue;
导入javafx.collections.ListChangeListener;
导入javafx.scene.scene;
导入javafx.scene.control.SelectionMode;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TablePosition;
导入javafx.scene.control.TableView;
导入javafx.scene.layout.BorderPane;
导入javafx.stage.stage;
公共类TableViewCountSelectedCellsByRow扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
TableView table=新TableView();
table.getColumns().addAll(Arrays.asList(
createCol(“名称”,项::名称属性),
createCol(“值”,项::valueProperty)
));
最终整数=100;
最终随机rng=新随机();
IntStream.rangeClosed(1,numItems)
.mapToObj(i->新项目(“项目”+i,rng.nextInt(20)))
.forEach(table.getItems()::添加);
table.getSelectionModel().setCellSelectionEnabled(true);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().getSelectedCells().addListener((ListChangeListener.Changetable.getSelectionModel().getSelectedItems().size()
不提供所选项目,而是提供所选行数。table.getSelectionModel().getSelectedItems().size()
给出选定的行数,而不是行中选定的单元格数。是的,这是我说的…你在问题中说的,它给了你选定的项目。O抱歉。我将更新问题