Java 在两个类之间传递全局ObservableList
我有个问题。如何在两个类之间传递同一个ObservableList的引用?我需要将SimultantTestController中的一个元素添加到FXMLDocumentController的列表中 我的代码(FXMLDocumentController):Java 在两个类之间传递全局ObservableList,java,javafx,Java,Javafx,我有个问题。如何在两个类之间传递同一个ObservableList的引用?我需要将SimultantTestController中的一个元素添加到FXMLDocumentController的列表中 我的代码(FXMLDocumentController): 公共类FXMLDocumentController实现可初始化{ 阶段primaryStage=新阶段(); 阶段选项=新阶段(); 阶段选择测试=新阶段(); ObservableList items=FXCollections.obse
公共类FXMLDocumentController实现可初始化{
阶段primaryStage=新阶段();
阶段选项=新阶段();
阶段选择测试=新阶段();
ObservableList items=FXCollections.observableArrayList();
公共可观察列表getList(){
退货项目;
}
@FXML
私有ListView项目列表;
@FXML
公共按钮btn_全局选项;
@FXML
私人按钮btn_添加;
@FXML
私人按钮btn_删除;
@FXML
专用按钮btn_向上移动;
@FXML
专用按钮btn_下移;
公共无效getPrimaryStage(阶段){
这个。初级阶段=阶段;
}
我的代码(SimultanTestController):
公共类SimultantTestController实现可初始化{
ObservableList items=(新的FXMLDocumentController()).getList();
@FXML
按钮btn_ok;
公共无效添加测试(ActionEvent事件){
对于(intx=0;x
所以你看,我有一个方法:getList
这个方法在SimultanTestController中调用,我尝试将getList的值解析为SimultanTestController中的ObservableList。
之后,我想从SimultantTestController向FXMLDocumentController中的ObservableList添加一个元素
谢谢你的帮助
我在此类中加载FXML文件:
首先,我为我的FXML文件创建了所有新的阶段,并有3个带有FXML文件名、窗口标题和所有阶段的ObservableList。然后,我用for循环加载所有阶段。(顺便问一下,这是一个好的解决方案吗?)
我的窗口打开方式:主-->选择测试-->同时测试
公共类SelectTestController实现可初始化{
ObservableList<String> items =FXCollections.observableArrayList();
Stage primaryStage = new Stage();
Stage simultan = new Stage();
Stage audioLoop = new Stage();
Stage cpu = new Stage();
Stage driversCD = new Stage();
Stage driversHD = new Stage();
Stage driversFD = new Stage();
Stage externalProgramm = new Stage();
Stage graphics = new Stage();
Stage interactive = new Stage();
Stage mainboard = new Stage();
Stage memorySPD = new Stage();
Stage memory = new Stage();
Stage network = new Stage();
Stage ports = new Stage();
Stage reboot = new Stage();
Stage signal = new Stage();
Stage userMessage = new Stage();
@FXML
private ListView lv_selectTest;
@FXML
private Button btn_choose;
@FXML
private Label test;
public void getPrimaryStage(Stage stage){
this.primaryStage=stage;
}
ObservableList<Stage> stages =FXCollections.observableArrayList();
ObservableList<String> fxml =FXCollections.observableArrayList();
ObservableList<String> stageTitel =FXCollections.observableArrayList();
public void initWindows(){
try {
for(int i=0;i<=stages.size();i++){
Window parent = primaryStage;
Parent root = FXMLLoader.load(getClass().getResource(fxml.get(i)));
Scene scene = new Scene(root);
stages.get(i).initOwner(parent);
stages.get(i).initModality(Modality.APPLICATION_MODAL);
stages.get(i).setTitle(stageTitel.get(i));
stages.get(i).setScene(scene);
stages.get(i).setResizable(false);
stages.get(i).setAlwaysOnTop(true);
}
}catch (IOException|IllegalStateException ex) {
System.out.println(ex);
}
}
observeList items=FXCollections.observearraylist();
阶段primaryStage=新阶段();
阶段模拟=新阶段();
Stage audioLoop=新Stage();
阶段cpu=新阶段();
阶段驱动器CD=新阶段();
阶段驱动器SHD=新阶段();
阶段驱动器fd=新阶段();
Stage externalprogram=新Stage();
阶段图形=新阶段();
舞台互动=新舞台();
后台主板=新后台();
阶段记忆PD=新阶段();
阶段存储器=新阶段();
舞台网络=新舞台();
阶段端口=新阶段();
阶段重新启动=新阶段();
阶段信号=新阶段();
Stage userMessage=new Stage();
@FXML
私有ListView lv_selectTest;
@FXML
私人按钮btn_选择;
@FXML
自有标签测试;
公共无效getPrimaryStage(阶段){
这个。初级阶段=阶段;
}
ObservableList stages=FXCollections.observableArrayList();
ObservableList fxml=FXCollections.observableArrayList();
ObservableList stageTitel=FXCollections.observableArrayList();
公共窗口(){
试一试{
对于(int i=0;i我为我的问题找到了自己的解决方案。我没有得到FXMLMain的控制器,但我用一个存储ObservableList项的Singleton类解决了它
现在我可以设置每个类中的项目,并可以在FXMLDocumentController的ListView中显示它们。如果有人有相同的问题,请与我联系以获得解决方案
感谢@James_D的帮助,这些控制器是由各自的fxmloader
s创建的。手动创建一个(就像您在SimultanTestController
中使用newFXMLDocumentController()
一样)对您没有用,因为您确实需要引用由FXMLLoader
创建的控制器。这两个控制器之间的关系是什么?它们对应的FXML文件加载在哪里?我为您添加了其他信息。这是我关于StackOverflow的第一个问题…“我有一个问题”,“您看到我工作了…”“谢谢你的帮助”,“我不知道为什么我不明白”都是问题中不相关的绒毛,不属于一个问题(阅读帮助教程,它清楚地说明了不要分心,不要闲聊。删除这些内容,除了使文章更易于阅读外,还会产生积极的副作用,可以立即减少文章中的拼写错误
public class SimultanTestController implements Initializable {
ObservableList<DefaultTestInterface> items = (new FXMLDocumentController()).getList();
@FXML
Button btn_ok;
public void addTest(ActionEvent event){
for( int x = 0 ; x < items.size() ; x++ ) { // start from index 0
System.out.println("Item" +items.get(x));
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
btn_ok.setOnAction(this::addTest);
}
}
ObservableList<String> items =FXCollections.observableArrayList();
Stage primaryStage = new Stage();
Stage simultan = new Stage();
Stage audioLoop = new Stage();
Stage cpu = new Stage();
Stage driversCD = new Stage();
Stage driversHD = new Stage();
Stage driversFD = new Stage();
Stage externalProgramm = new Stage();
Stage graphics = new Stage();
Stage interactive = new Stage();
Stage mainboard = new Stage();
Stage memorySPD = new Stage();
Stage memory = new Stage();
Stage network = new Stage();
Stage ports = new Stage();
Stage reboot = new Stage();
Stage signal = new Stage();
Stage userMessage = new Stage();
@FXML
private ListView lv_selectTest;
@FXML
private Button btn_choose;
@FXML
private Label test;
public void getPrimaryStage(Stage stage){
this.primaryStage=stage;
}
ObservableList<Stage> stages =FXCollections.observableArrayList();
ObservableList<String> fxml =FXCollections.observableArrayList();
ObservableList<String> stageTitel =FXCollections.observableArrayList();
public void initWindows(){
try {
for(int i=0;i<=stages.size();i++){
Window parent = primaryStage;
Parent root = FXMLLoader.load(getClass().getResource(fxml.get(i)));
Scene scene = new Scene(root);
stages.get(i).initOwner(parent);
stages.get(i).initModality(Modality.APPLICATION_MODAL);
stages.get(i).setTitle(stageTitel.get(i));
stages.get(i).setScene(scene);
stages.get(i).setResizable(false);
stages.get(i).setAlwaysOnTop(true);
}
}catch (IOException|IllegalStateException ex) {
System.out.println(ex);
}
}