在调用类中添加参数会阻止其打开新的窗口方法。 Java FX

当通过控制器的新类调用传递参数时,似乎参数的存在会阻止该类执行其正确打开新窗口的方法(该方法存在于被调用类中,该方法会打开一个新窗口。新窗户)。但是,当在initialize方法内的类中重新创建示例数据且未传递参数时,调用类及其新的窗口创建方法即可。

在新类的初始化方法中调用表/图形方法等的构建。创建新窗口是一种在初始化类本身之后在控制器内调用的方法。

任何帮助将不胜感激。谢谢。

db.collection.aggregate(
   [
      {
         $match: {
            $expr: {
               $or: [
                  { $ne: ["$preferences.MCN-ONE",null] },{ $ne: ["$preferences.MCN-TWO",{ $ne: ["$preferences.MCN-THREE",null] }
               ]
            }
         }
      },{
         $set: {
            preferences: {
               $mergeObjects: [
                  { "MCN-ONE": "$preferences.MCN-ONE" },{ "MCN-TWO": "$preferences.MCN-TWO" },{ "MCN-THREE": "$preferences.MCN-THREE" }
               ]
            }
         }
      }
   ]
)
Main:
package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getclass().getResource("sample.fxml"));
        primaryStage.setTitle("Example"); //set the name of the title
        primaryStage.setScene(new Scene(root,1200,750)); //width and height of pane
        primaryStage.sizeToScene();
        primaryStage.show();
        primaryStage.setMinWidth(primaryStage.getWidth());
        primaryStage.setMinHeight(primaryStage.getHeight());
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

Controller:package sample;

import java.util.ArrayList;
import java.util.Random;
import java.util.Set;

public class Controller {

    public Controller() {
    }
    public void openWin() {
//         Example Data Set
        ArrayList<ArrayList<Double>> data = new ArrayList<>();
        for (double j = 0; j < 5; j++) {
            ArrayList<Double> exampleDataSet = new ArrayList<>();
            exampleDataSet.add(j);
            for (int i = 0; i < 5; i++) {
                Random r = new Random();
                double randomValue = 0 + (100 - 0) * r.nextDouble();
                exampleDataSet.add(randomValue);
            }
            data.add(exampleDataSet);
        }
        //Example Headers for Data Set
        String headers = "Header1,Header2,Header3,Header4,Header5";
        //Open New Window (this is upon button click)
        Win newWin = new Win(headers,data);
        newWin.openNewWin();
    }

//
//

}

Win Class:package sample;

import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import java.util.ArrayList;
import java.util.List;

public class Win {
    @FXML private TableView<ObservableList<Double>> tableView = new TableView<>();

    private Stage stage = new Stage();

    String headers[] = null;
    String items[] = null;
    List<String> columns = new ArrayList<String>();
    List<String> rows = new ArrayList<String>();
    ObservableList<ObservableList<Double>> csvData = FXCollections.observableArrayList();

    private String newHeaders;
    private ArrayList<ArrayList<Double>> data = new ArrayList<>();

    public Win(String headers,ArrayList data) {
        this.newHeaders = headers;
        this.data = data;
    }
    public void initialize() {
        generatetable(newHeaders,data);
    }

    public void openNewWin() {
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getclass().getResource("win.fxml"));
            Parent root1 = fxmlLoader.load();
            stage.initStyle(StageStyle.DECORATED);
            stage.initModality(Modality.APPLICATION_MODAL);
            stage.setTitle("Table");

            stage.setScene(new Scene(root1));
            stage.show();

        } catch(Exception e) {
            System.out.println("Cannot load new window");
            System.err.println(e.getMessage());
            System.out.println(newHeaders);
            System.out.println(data);
        }
    }
    public void generatetable(String newHeaders,ArrayList<ArrayList<Double>> dataset) {
        try {
            System.out.println(newHeaders);
            System.out.println(dataset);
            headers = newHeaders.split(",");
            for (String w : headers) {
                columns.add(w);
            }

            for (int i = 0; i < columns.size(); i++) {
                final int finalIdx = i;
                TableColumn<ObservableList<Double>,Double> column = new TableColumn<>(columns.get(i));
                column.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getvalue().get(finalIdx))); //Set text
                tableView.getcolumns().add(column);
            }

            for (ArrayList<Double> array : dataset) {
                ObservableList<Double> row = FXCollections.observableArrayList();
                row.clear();
                for (double number : array) {
                    row.add(number);
                }
                csvData.add(row);
            }
            tableView.setItems(csvData);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

wanghaitao1987 回答:在调用类中添加参数会阻止其打开新的窗口方法。 Java FX

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2631686.html

大家都在问