您将如何向地址簿程序添加删除和编辑功能?

How would you add a delete and edit function to the Address book program?

所以我通过这个例子来练习TableView: http://docs.oracle.com/javase/8/javafx/fxml-tutorial/fxml_tutorial_intermediate.htm

我明白其中的一切,除了我想进一步扩展它并包括删除和编辑功能。有人可以帮帮我吗!?我已经尝试了一段时间,但似乎没有任何效果。

这是我的添加功能(有效):

@FXML
    protected void addMusic(ActionEvent actionEvent) {
        ObservableList<Music> data = tableView.getItems();
        data.add(new Music(albumField.getText(),
                songField.getText(),
                genreField.getText()
        ));

        albumField.setText("");
        songField.setText("");
        genreField.setText("");
    }

我的删除功能不起作用:

      @FXML
    protected void deleteMusic(ActionEvent actionEvent) {
        ObservableList<Music> data = tableView.getItems();
        data.remove(new Music(albumField.deleteText(),
                songField.deleteText(),
                genreField.deleteText()
        ));

    }


        }

谢谢

更改了 deleteMusic:

 @Override
    protected void deleteMusic(ActionEvent actionEvent) {
        ObservableList<Music> data = tableView.getItems();
        data.remove(equals(Music(albumField.deleteText(), songField.deleteText(), genreField.deleteText());

        albumField.setText("");
        songField.setText("");
        genreField.setText("");

    }

音乐class:

package sample;

import javafx.beans.property.SimpleStringProperty;



public class Music {
    private final SimpleStringProperty album = new SimpleStringProperty("");
    private final SimpleStringProperty song = new SimpleStringProperty("");
    private final SimpleStringProperty genre = new SimpleStringProperty("");

    public Music() {
        this("", "", "");
    }

    public Music(String album, String song, String genre) { //Constructor utilised
        setAlbum(album);
        setSong(song);
        setGenre(genre);
    }


    public String getAlbum() {
        return album.get();
    }

    public void setAlbum(String sAlbum) {
        album.set(sAlbum);
    }

    public String getSong() {
        return song.get();
    }

    public void setSong(String sAlbum) {
        song.set(sAlbum);
    }

    public String getGenre() {
        return genre.get();
    }

    public void setGenre(String sAlbum) {
        genre.set(sAlbum);
    }


}

http://i.stack.imgur.com/2SoWs.png

大多数 java Collection 使用 equals 方法来检查 2 个对象是否被认为是相同的。如果集合的元素不覆盖 equals,则没有 2 个不同的对象被认为是相等的,即使它们在其字段中包含相同的值也是如此。

您可以像这样覆盖 equals

...
import java.util.Objects;

public class Music {
    ...

    @Override
    public boolean equals(Object obj) {
        // make sure equals is symetric
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        final Music other = (Music) obj;
        // compare strings for equality
        return Objects.equals(this.getAlbum(), other.getAlbum())
                && Objects.equals(this.getSong(), other.getSong())
                && Objects.equals(this.getGenre(), other.getGenre());
    }

}

然后您可以使用

data.remove(new Music(albumField.getText(), songField.getText(), genreField.getText()));

从列表中删除一个 Music 对象。