javafx - 如何确定记录是否存在于 javafx 的 TableView 中

标签 javafx tableview

我有一个手动添加行的 TableView ,我想在添加行之前知道要添加的记录是否已经在表中。

最佳答案

James_D 说你必须在你的类中添加 @Override public boolean equals(Object obj) 方法。这将允许您使用默认的 List contains() 函数,这样您就可以在 Controller 代码中执行类似的操作

if(!table.getItems().contains(newObj))
   table.getItems().add(newObj);

示例代码如下:

public void start(Stage primaryStage) throws Exception {
        ObservableList<MyObject> items = FXCollections.observableArrayList(
                new MyObject("Robert"),
                new MyObject("Nick"),
                new MyObject("John"),
                new MyObject("Kate"));

        TableView<MyObject> table = new TableView<>();
        table.setItems(items);
        TableColumn<MyObject, String> column = new TableColumn<>("Column Name");
        column.setCellValueFactory(new PropertyValueFactory<>("name"));
        table.getColumns().addAll(column);
        table.setItems(items);

        TextField textField = new TextField();
        Button button = new Button("Add");
        button.setOnMouseClicked(event -> {
            MyObject newObj = new MyObject(textField.getText());
            if(!table.getItems().contains(newObj)){
                table.getItems().addAll(newObj);
            }
        });

        VBox root = new VBox();
        root.getChildren().addAll(table, textField, button);

        primaryStage.setScene(new Scene(root, 600, 475));
        primaryStage.show();
    }

    public static class MyObject {
        private String name;

        public MyObject(String name) {
            setName(name);
        }

        @Override
        public boolean equals(Object obj) {
            return obj instanceof MyObject &&
                    ((MyObject) obj).name.equals(name);
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

这将是一个合适的方法,但如果你不能改变对象类,你总是可以使用这个或类似的辅助函数。

  public static boolean contains(TableView<MyObject> table, MyObject obj){
        for(MyObject item: table.getItems())
            if (item.getName().equals(obj.getName()))
                return true;

        return false;
    }

enter image description here

关于javafx - 如何确定记录是否存在于 javafx 的 TableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30610011/

相关文章:

ios - 如何在 tableView swift 中快速进行数组追加和排序

iOS/swift : Determine vertical position of last populated row of tableview

java - 在 JavaFX 中动态加载图像到 Anchorpane

java - 如何检测 JavaFx 双击 listView

Java高级GUI应用程序框架

java - 如何像 Swing 中的 JTable 一样在 JavaFX TableView 中单击时获取第一列值?

ios - 冗余计算减慢 UITableView 速度

javafx - 如何从TableView中删除选定的行? (带有 FXML 的 JavaFX)

java - 如何使用 JavaFX CSS 删除带有嵌套标签的按钮的填充

java - CalendarFX 结合 JavaFX : Module javafx. 未找到控件