如何在地址簿程序中添加删除和编辑功能?

时间:2015-05-21 21:18:32

标签: java javafx

所以我通过这个例子练习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("");

    }

音乐课:

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

1 个答案:

答案 0 :(得分:2)

如果认为2个对象相同,则大多数java Collection使用equals方法进行检查。如果集合的元素不覆盖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对象。