所以我通过这个例子练习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);
}
}
答案 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
对象。