我只是尝试为tableview和combobox设置值,但我甚至无法运行它,即使它只是代码的一小部分......
这是我建立的场景。 media scene
这是主要方法。
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Project3 extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("Media.fxml"));
primaryStage.setTitle("Media GUI");
primaryStage.setScene(new Scene(root, 800, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是我的控制器:
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class Project3Controller{
//for media
@FXML
private TextField titleField;
@FXML
private ComboBox<String> ownerDrop;
@FXML
private ComboBox<String> formatDrop;
@FXML
private ComboBox<String> locationDrop;
@FXML
private ComboBox<String> rippedDrop;
@FXML
private DatePicker releasePicker;
@FXML
private DatePicker purchasePicker;
@FXML
private Button add;
//for owner
@FXML
private TextField fNameField;
@FXML
private TextField lNameField;
@FXML
private TextField phoneField;
@FXML
private ComboBox<String> filterDrop;
@FXML
private Button filter;
//for table view
@FXML
private TableView<MediaViewModel> mediaTable;
@FXML
private TableColumn<MediaViewModel, String> addTitle;
@FXML
private TableColumn<MediaViewModel, String> addLocation;
@FXML
private TableColumn<MediaViewModel, String> addRDate;
@FXML
private TableColumn<MediaViewModel, String> addOwner;
@FXML
private TableColumn<MediaViewModel, String> addRipped;
@FXML
private TableColumn<MediaViewModel, String> addFormat;
@FXML
private TableColumn<MediaViewModel, String> addPDate;
//labels and AnchorPane
@FXML
private Label lastName;
@FXML
private Label purchaseDate;
@FXML
private Label media;
@FXML
private Label title;
@FXML
private Label ripped;
@FXML
private AnchorPane owner;
@FXML
private Label releaseDate;
@FXML
private Label format;
@FXML
private Label firstName;
@FXML
private Label owner2;
@FXML
private Label phone;
@FXML
private Label location;
//Declare a Observable list for storing TableView's data
ObservableList<MediaViewModel> mediaData = FXCollections.observableArrayList();
//int mediaCount = 1;
public void initialize() {
//add items in the ComboBox
final ObservableList<String> formatOption= FXCollections.observableArrayList("DVD","Blu-Ray","Game","Music");
formatDrop.setItems(formatOption);
final ObservableList<String> locationOption= FXCollections.observableArrayList("Home","iTunes","Amazon","Microsoft");
locationDrop.setItems(locationOption);
final ObservableList<String> rippedOption= FXCollections.observableArrayList("true","false");
rippedDrop.setItems(rippedOption);
final ObservableList<String> filterOption= FXCollections.observableArrayList("DVD","Blu-Ray","Game","Music");
filterDrop.setItems(filterOption);
mediaTable.setItems(mediaData);
//add items in the table
addTitle.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("title"));
addFormat.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("format"));
addLocation.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("location"));
addRipped.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("ripped"));
addRDate.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("releaseDate"));
addPDate.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("purchaseDate"));
addOwner.setCellValueFactory(new PropertyValueFactory<MediaViewModel, String>("owner"));
}
}
这是MediaViewModel类:
import javafx.beans.property.SimpleStringProperty;
import java.io.*;
import java.time.LocalDate;
import javafx.beans.property.*;
public class MediaViewModel{
private final SimpleStringProperty title = new SimpleStringProperty();
private final SimpleStringProperty format = new SimpleStringProperty();
private final SimpleStringProperty location = new SimpleStringProperty();
private final SimpleStringProperty ripped = new SimpleStringProperty();
private final SimpleStringProperty releaseDate = new SimpleStringProperty();
private final SimpleStringProperty purchaseDate = new SimpleStringProperty();
private final SimpleStringProperty owner = new SimpleStringProperty();
public MediaViewModel(String t, String f, String l, String r, LocalDate rD, LocalDate pD, String o){
this.title.set(t);
this.format.set(f);
this.location.set(l);
this.ripped.set(r);
this.releaseDate.set(rD.toString());
this.purchaseDate.set(pD.toString());
this.owner.set(o);
}
public String getTitle(){
return title.get();
}
public String getFormat(){
return format.get();
}
public String getLocation(){
return location.get();
}
public String getRipped(){
return ripped.get();
}
public String getReleaseDate(){
return releaseDate.get();
}
public String getPurchaseDate(){
return purchaseDate.get();
}
public String getOwner(){
return owner.get();
}
}
当我运行它时,我收到以下错误:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException:
/Users/shachuan/Desktop/Media.fxml:7
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at Project3.start(Project3.java:10)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.IllegalArgumentException: Can not set javafx.scene.control.Label field Project3Controller.media to javafx.scene.layout.AnchorPane
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:764)
at javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1163)
at javafx.fxml.FXMLLoader.access$1600(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$ValueElement.processValue(FXMLLoader.java:857)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:751)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
... 14 more
很抱歉代码过长...我对java非常新,所以欢迎任何帮助。感谢:!)
答案 0 :(得分:0)
AnchorPane的fx:id是媒体,而有一个标签的fx:id也是媒体。清除fx:ids并解决。