我正在尝试使用javafx和场景构建器构建音频库。
这是我在fxml文件中的相关位:
TableView fx:id="tableView" layoutX="45.0" layoutY="85.0" prefHeight="481.0" prefWidth="573.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn prefWidth="154.0" text="Album" />
<TableColumn prefWidth="160.0" text="Songs" />
<TableColumn prefWidth="133.0" text="Artist" />
<TableColumn prefWidth="125.0" text="Genre" />
</columns>
</TableView>
它与我的控制器类链接。
这是我试图用我的Controller类填充它的数据:
final ObservableList<Integer> ratingSample = FXCollections.observableArrayList(1, 2, 3, 4, 5);
ObservableList<String> artists = FXCollections.observableArrayList("Adele",
"Unknown", "Beyonce", "Rihanna", "Avril", "Disturbia", "Kid Rock", "Jessi J", "Unknown", "Unknown");
final ObservableList<Integer> ratingSample = FXCollections.observableArrayList(1, 2, 3, 4, 5);
ObservableList<String> artists = FXCollections.observableArrayList("Adele",
"Unknown", "Beyonce", "Rihanna", "Avril", "Disturbia", "Kid Rock", "Jessi J", "Unknown", "Unknown");
ObservableList<String> titles = FXCollections.observableArrayList("Running in the Deep",
"Title 01","Title 09","What's my name","What the Hell","Disturbia","Kid Rock","Price Tag","Title 2","09");
@FXML
TableView<Music> table = new TableView<>();
@FXML
private TableView<Music> tblViewer = new TableView<Music>();
@FXML
TableColumn<Music, Album> albumArt = new TableColumn<Music, Album>("Album Art");
@FXML
TableColumn<Music, String> title = new TableColumn<Music, String>("Title");
@FXML
TableColumn<Music, String> artist = new TableColumn<Music, String>("Artist");
@FXML
TableColumn<Music, Integer> rating = new TableColumn<Music, Integer>("Rating");
@FXML
public TableView getTableView() {
albumArt.setCellValueFactory(new PropertyValueFactory("album"));
title.setCellValueFactory(new PropertyValueFactory("title"));
artist.setCellValueFactory(new PropertyValueFactory("artist"));
rating.setCellValueFactory(new PropertyValueFactory("rating"));
// SETTING THE CELL FACTORY FOR THE ALBUM ART
albumArt.setCellFactory(new Callback<TableColumn<Music, Album>, TableCell<Music, Album>>() {
@Override
public TableCell<Music, Album> call(TableColumn<Music, Album> param) {
TableCell<Music, Album> cell = new TableCell<Music, Album>() {
@Override
public void updateItem(Album item, boolean empty) {
if (item != null) {
HBox box = new HBox();
box.setSpacing(10);
VBox vbox = new VBox();
vbox.getChildren().add(new Label(item.getArtist()));
vbox.getChildren().add(new Label(item.getAlbum()));
ImageView imageview = new ImageView();
imageview.setFitHeight(50);
imageview.setFitWidth(50);
imageview.setImage(new Image(MusicTable.class.getResource("img").toString() + "/" + item.getFilename()));
box.getChildren().addAll(imageview, vbox);
//SETTING ALL THE GRAPHICS COMPONENT FOR CELL
setGraphic(box);
}
}
};
System.out.println(cell.getIndex());
return cell;
}
});
// SETTING THE CELL FACTORY FOR THE RATINGS COLUMN
rating.setCellFactory(new Callback<TableColumn<Music, Integer>, TableCell<Music, Integer>>() {
@Override
public TableCell<Music, Integer> call(TableColumn<Music, Integer> param) {
TableCell<Music, Integer> cell = new TableCell<Music, Integer>() {
@Override
public void updateItem(Integer item, boolean empty) {
if (item != null) {
ChoiceBox choice = new ChoiceBox(ratingSample);
choice.getSelectionModel().select(ratingSample.indexOf(item));
//SETTING ALL THE GRAPHICS COMPONENT FOR CELL
setGraphic(choice);
}
}
};
return cell;
}
});
//ADDING ALL THE COLUMNS TO TABLEVIEW
table.getColumns().addAll(albumArt, title, artist, rating);
//ADDING ROWS INTO TABLEVIEW
ObservableList<Music> musics = FXCollections.observableArrayList();
for (int i = 0; i < 10; i++) {
Album al = new Album(i + 1 + ".jpg", artists.get(i), artists.get(i));
Music m = new Music(artists.get(i),al,titles.get(i),i%5);
musics.add(m);
}
table.setItems(musics);
return table;
}
音乐课:
package sample;
import javafx.beans.property.*;
public class Music {
//Properties
private SimpleStringProperty artist = new SimpleStringProperty();
private ObjectProperty albumArt= new SimpleObjectProperty();
private StringProperty title= new SimpleStringProperty();
public Music(String artist, Album album, String title, int year) {
setArtist(artist);
setAlbum(album);
setTitle(title);
/*setGenre (genre);
setYear(year);
setRating(rating);*/
}
//ARTIST -----------
public void setArtist(String art){
artist.set(art);
}
public String getArtist(){
return artist.get();
}
public StringProperty artistProperty(){
return artist;
}
//ALBUM ------------
public void setAlbum(Album alb){
albumArt.set(alb);
}
public Object getAlbum(){
return albumArt.get();
}
public ObjectProperty albumProperty(){
return albumArt;
}
//TITLE -------------
public void setTitle(String tit){
title.set(tit);
}
public String getTitle(){
return title.get();
}
public StringProperty titleProperty(){
return title;
}
/*//GENRE --------------
public void setGenre(String gen){
genre.set(gen);
}
public String setGenre(){
return genre.get();
}
public StringProperty genreProperty(){
return genre;
}
//YEAR --------------
public void setYear(int yea){
year.set(yea);
}
public Integer getYear(){
return year.get();
}
public IntegerProperty yearProperty(){
return year;
}
//RATING --------------
public void setRating(int rat){
rating.set(rat);
}
public Integer getRating(){
return rating.get();
}
public IntegerProperty ratingProperty(){
return rating;
}
*/
}
因此,代码运行,但表中没有显示数据。
我尝试了很多这个版本。然而似乎没有任何作用。有人能帮助我理解我做错了什么吗?