私は2つのjavaFxウィンドウを持っています。最初のウィンドウは、ComboBox
とButton
で、2番目のモーダルウィンドウを開きます。第二ウィンドウで別のウィンドウからComboBox値を取得するTextFieldコントロール
はMainController
ウィンドウのComboBox
にテキストフィールド値を追加するTextField
とButton
Control
を持っています。私はそれをどうやって行うのか分からない。説明された例で私にとって大きな助けになります。以下は、クラスである:
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>
[Passing Parameters 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