当通过控制器的新类调用传递参数时,似乎参数的存在会阻止该类执行其正确打开新窗口的方法(该方法存在于被调用类中,该方法会打开一个新窗口。新窗户)。但是,当在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();
}
}
}