我有兩個javaFx窗口。第一個有ComboBox
和Button
打開第二個模式窗口。從另一個窗口獲取ComboBox值TextField控件
在第二個窗口中有一個TextField
和Button
Control
到文本字段值添加到MainController
窗口的ComboBox
。我不知道如何去做。有了解釋的例子會對我很有幫助。下面是類:
Main.java
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("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Contrller.java
package sample;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable{
@FXML
public ComboBox<String> combo;
@FXML
Button button;
public ObservableList<String> list = FXCollections.observableArrayList("A");
@Override
public void initialize(URL location, ResourceBundle resources) {
setCombo();
}
public void setCombo(){
combo.setItems(list);
}
public void openModal() throws IOException {
Stage primaryStage = new Stage();
Parent root = FXMLLoader.load(getClass().getResource("sec.fxml"));
primaryStage.setTitle("Send Mail");
primaryStage.setScene(new Scene(root,800,600));
primaryStage.initModality(Modality.WINDOW_MODAL);
//primaryStage.initOwner((Stage) menuBar.getScene().getWindow());
primaryStage.show();
}
}
FXML的主窗口:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<StackPane prefHeight="67.0" prefWidth="600.0">
<children>
<Label text="Get value from Another Child Dialog" />
</children>
</StackPane>
<HBox prefHeight="100.0" prefWidth="200.0">
<children>
<Label text="Add Value of TextBox:" />
<ComboBox fx:id="combo" prefWidth="150.0" />
</children>
</HBox>
<Button fx:id="button" mnemonicParsing="false" onAction="#openModal" text="Open Dialog" />
</children>
</VBox>
現在第二個窗口Sec.Java
package sample;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
/**
* Created by tracedot on 12/11/16.
*/
public class Sec implements Initializable{
@FXML
Button button;
@FXML
TextField textfield;
public Controller controller=new Controller();
public void setToCombo(){
String cbvalue= textfield.getText();
controller.combo.getItems().add(cbvalue);
//controller.combo.itemsProperty().setValue(new ArrayList<String>().add());
}
@Override
public void initialize(URL location, ResourceBundle resources) {
//setToCombo();
}
}
第二個窗口FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<HBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Sec">
<children>
<TextField fx:id="textfield" />
<Button fx:id="button" mnemonicParsing="false" onAction="#setToCombo" text="Add to Combo" />
</children>
</HBox>
[傳遞參數JavaFX FXML]的可能重複(http://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml) – Omid
也相關:http://stackoverflow.com/questions/40117925/javafx -many-static-fxml-controllers/40353976#40353976 – Omid