0

1 つの FXML に 1 つのボタンがあり、別の FXML に 2 つのテキスト フィールドがあります。これら 2 つの FXML は独立しています。つまり、ネストされていません。ボタンがクリックされるたびに、テキスト (2 つのテキスト フィールドにある) をコンソール/出力に出力したいと考えています。以下は、fxml とそのコントローラーです。

ボタン.fxml

    <AnchorPane id="AnchorPane" prefHeight="200.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml" fx:controller="textboxandbuttonbinding.ButtonController">
      <children>
         <Button fx:id="button" layoutX="126.0" layoutY="90.0" onAction="#handleButtonAction" text="Button" />
      </children>
    </AnchorPane>

ButtonController.java

    public class ButtonController implements Initializable {

        @FXML
        private void handleButtonAction(ActionEvent event) {

        }

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }    
    }

テキスト.fxml

    <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="textboxandbuttonbinding.Sample1111Controller">
       <children>
           <TextField fx:id="textField1" layoutX="186.0" layoutY="133.0" prefWidth="200.0" promptText="text 1" />
           <TextField fx:id="textField2" layoutX="186.0" layoutY="200.0" prefWidth="200.0" promptText="text2" />
       </children>
    </AnchorPane>

TextController.java

    public class TextController implements Initializable {
        @FXML
        private TextField textField1;
        @FXML
        private TextField textField2;

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }    
    }

この機能を実現するにはどうすればよいですか? これら 2 つの FXML が 2 つの異なるウィンドウとして同時に読み込まれることを考慮しました。

4

2 に答える 2

2

上記の回答(SnakeDocによる)にいくつかの変更を加えることで、機能を実現できます。

別のシングルトン クラスを作成しました。

Singleton.java

    public class Singleton {
        private static Singleton instance = new Singleton();
        public static Singleton getInstance(){
            return instance;
        }

        private TextField txtField1;
        private TextField txtField2;

        public TextField getTxtField2() {
            return txtField2;
        }

        public void setTxtField2(TextField txtField2) {
           this.txtField2 = txtField2;
        }

        public TextField getTxtField1() {
           return txtField1;
        }

       public void setTxtField1(TextField txtField1) {
           this.txtField1 = txtField1;
       }

    }

テキスト フィールドは、initialize メソッドで設定されます。

TextController.java

    public class TextController implements Initializable {

       @FXML
       private TextField textField1;

       @FXML
       private TextField textField2;

       @Override
       public void initialize(URL url, ResourceBundle rb) {
            Singleton.getInstance().setTxtField1(textField1);
            Singleton.getInstance().setTxtField2(textField2);
       }    
    }

getter メソッドは、クラス ButtonController.java で呼び出されます。

ButtonController.java

    public class ButtonController implements Initializable {    

        @FXML
        private void handleButtonAction(ActionEvent event) {
            String str1 = Singleton.getInstance().getTxtField1().getText();
            String str2 = Singleton.getInstance().getTxtField2().getText();

            System.out.println(str1);
            System.out.println(str2);

        }

        @Override
        public void initialize(URL url, ResourceBundle rb) {

        }    
    }
于 2013-11-10T10:28:38.827 に答える
1

コントローラーをシングルトンに変換し、セッター/ゲッターと他のコントローラーを用意して、値にアクセスします。

public class TextController implements Initializable {

    private TextController instance;

    private TextController() {};

    public static TextController getInstance() {
        if (TextController.instance == null) {
            synchronized (TextController.class) {
                if (TextController.instance == null) {
                    TextController.instance = new TextController();
                }
            }
        }
        return TextController.instance;
    }

    @FXML
    private TextField textField1;

    public TextField getTextField1() {
        return textField1;
    }
    @FXML
    private TextField textField2;

    public TextField getTextField2() {
        return textField2;
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }    
}

次に、他のコントローラーで次のようなことができます。

TextController.getInstance().getTextField1();

于 2013-11-09T22:11:04.390 に答える