【问题标题】:How would you add a delete and edit function to the Address book program?您将如何向地址簿程序添加删除和编辑功能?
【发布时间】:2015-05-21 21:18:32
【问题描述】:

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


}

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

【问题讨论】:

  • Music 是否覆盖 equals
  • 您正在创建一个新的 Music 对象,而不是抓取现有的对象,因此如果您没有重写 equals() 来检查数据相等性而不是对象引用相等性,它永远不会找到您尝试删除的对象。
  • @azurefrog 很抱歉,我没明白,你能给我看看吗?
  • data.remove(覆盖等于(Music(albumField.deleteText(), songField.deleteText(),genreField.deleteText())));
  • 评论里的代码真的没法看。如果您想在问题中添加一些内容,请编辑原始问题并在此处添加代码。

标签: java javafx


【解决方案1】:

大多数javaCollections 使用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 对象。

【讨论】:

  • 谢谢!我应该对 musicDelete 方法做什么?
  • 另外,我将如何执行编辑功能?非常感谢你的帮助!!很抱歉给您带来困扰
  • @april21:抱歉,您当然需要使用与addMusic 方法相同的方法从文本字段中获取文本。顺便说一句:在您了解基本的 java 教程之前,我不建议您从 javafx 开始。 UI 编程有点高级,当然不是开始学习 java 的地方......但我基本上会这样编辑:允许用户选择一行,获取选定的 Music 对象,然后更改属性该对象(属性更改时应该有监听器来处理 ui 更新;否则您需要通知 ui 发生了更改)。
  • @april21:不工作是什么意思?名单有修改吗?用户界面没有更新吗?你有例外吗?您确定在所有文本字段中都输入了完全相同的Strings 吗?你有例外吗?
  • @april21:因为你没有得到“覆盖等于”的提示,我建议你做关于多态/接口、类似概念、集合的教程(确保你也确定你知道equals [和 hashCode] 的重要性,如果你不知道,那么从 javafx 开始。在我看来,关于 javafx 的 oracle 教程是我能找到的最好的,但您从 intermediate 教程开始,这不是一个好主意。从初学者教程开始,确保您了解所有内容。 javadoc 也是查找更多详细信息的好地方。
猜你喜欢
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多