【发布时间】:2019-10-17 15:36:27
【问题描述】:
我正在开发一个相当简单的 javafx 应用程序,它有几个不同的场景,我的第一个场景是将 Show 对象添加到通用链表中,然后在第二个场景中添加其中一个节目的表演。对象(例如在节目中添加日场或晚间表演 Annie)
我已经创建了第一个场景并且可以将 Show 对象添加到链接列表中,但是我无法使用创建的节目填充第二个场景中的 tableview 以供用户选择和添加表演
这是我添加的显示控制器的样子:
public class AddShowController {
@FXML private TextField titleField;
@FXML private TextField cirField,stlField, balField;
@FXML private Slider runTimeSlider;
@FXML private DatePicker startDatePicker, endDatePicker;
TheLinkedList<Show> showList = new TheLinkedList<>();
private static AddShowController instance;
public AddShowController() {
instance = this;
}
public static AddShowController getInstance(){
return instance;
}
public void addShowButtonPushed (ActionEvent e){
showList.addElement(new Show (titleField.getText(),
(int) runTimeSlider.getValue(),
startDatePicker.getValue().toString(),
endDatePicker.getValue().toString(),
cirField.getText(),
stlField.getText(),
balField.getText()));
}
如您所见,我已尝试创建控制器实例,以便可以从添加性能控制器访问链接列表,但没有任何乐趣。
这是添加性能控制器:
public class AddPerfController {
@FXML private ChoiceBox perfTimeChoiceBox;
@FXML private TableView<Show> showTable;
@FXML private TableColumn<Show, String> titleColumn;
@FXML private TableColumn<Show, String> runTimeColumn;
@FXML private TableColumn<Show, String> startDateColumn;
@FXML private TableColumn<Show, String> endDateColumn;
@FXML private TableColumn<Show, String> cirTicketPriceColumn;
@FXML private TableColumn<Show, String> stlTicketPriceColumn;
@FXML private TableColumn<Show, String> balTicketPriceColumn;
private ObservableList<Show> showData = FXCollections.observableList(AddShowController.getInstance().showList);
public void initialize() {
perfTimeChoiceBox.getItems().addAll("Matinee","Evening");
perfTimeChoiceBox.setValue("Matinee");
titleColumn.setCellValueFactory(new PropertyValueFactory<>("title"));
runTimeColumn.setCellValueFactory(new PropertyValueFactory<>("runningTime"));
startDateColumn.setCellValueFactory(new PropertyValueFactory<>("startDate"));
endDateColumn.setCellValueFactory(new PropertyValueFactory<>("endDate"));
cirTicketPriceColumn.setCellValueFactory(new PropertyValueFactory<>("cirTicketPrice"));
stlTicketPriceColumn.setCellValueFactory(new PropertyValueFactory<>("stlTicketPrice"));
balTicketPriceColumn.setCellValueFactory(new PropertyValueFactory<>("balTicketPrice"));
showData.add(new Show("Annie", 100,"12/12/2019", "14/12/2019","10","15", "20"));
showTable.setItems(showData);
}
【问题讨论】:
-
不知道,如果
TheLinkedList正确实施。然而,作为与TableView一起使用的ObservableList的后备列表,这是一个糟糕的选择。在表的更新过程中,插入/删除元素时获得的任何性能都会丢失很多,因为这确实是通过索引访问... -
我必须使用链表进行分配,但不需要使用 tableview,我只需要在单独的场景中让用户可以选择显示对象,你建议我使用什么代替?
-
取决于是否需要在模型中使用
TheLinkedList。在某些情况下,只需使用不同的支持列表将其复制到ObservableList就可以解决问题:showTable.getItems().setAll(theList);顺便说一句,您可能看不到差异,除非您的列表变得非常大。无论如何,您需要创建一个minimal reproducible example:确保我们知道哪个 sn-ps 以哪个顺序被调用。目前,如果您做出几个假设,例如,您的代码似乎还可以。仅创建一个实例AddShowController(或子类型)。 (一般情况下最好避免使用static来传递数据)...
标签: java javafx linked-list tableview scenebuilder