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

标签 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()
        ));

    }


        }

谢谢

更改了删除音乐:

 @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);
    }


}

/image/2SoWs.png

最佳答案

大多数 java Collection 使用 equals 方法来检查两个对象是否相同。如果集合的元素不重写 equals,则不会将两个不同的对象视为相等,即使它们的字段中包含相同的值。

您可以像这样重写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()));

从列表中删除音乐对象。

关于java - 如何向地址簿程序添加删除和编辑功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384516/

相关文章:

Java - 如何正确地将 ListSelectionListener 添加到 Controller ?

JavaFX Java 11 及更高版本

java - 使用 RegExp 提取括号之间的值

java - 何时使用 GlueList 而不是 ArrayList 或 LinkedList?

java - 我无法纠正的鼠标事件未知错误

java - OGNL 表达式解析与编译

android - Gradle无法识别命令 “createProject”

java - 我应该在学习 JavaFx 之前先学习 Swing 吗?

java - Java 9 中的 com.sun.javafx.collections

java - 如何减慢时间轴关键帧持续时间