3

いくつかのコントロールを備えたJavaFXユーザーインターフェイスがあります。値は、Modelクラスのフィールド内に格納する必要があります。UIクラスにはModelへの参照があります。

Modelクラスが基本であると言います。

public static class Model{String myText; /*javabeans getters and setters provided too*/}

JavaFXアプリケーションは次のとおりです。

public class T08 extends Application {

Model model;

@Override
public void start(Stage primaryStage) throws Exception {

    model = new Model();

    BorderPane bp = new BorderPane();
    primaryStage.setScene(new Scene(bp));

    //this is the component that should be connected to model.myText
    TextField textField = new TextField();

    bp.setCenter(textField);        
    primaryStage.show();

}

質問

  1. ユーザーはtextFieldコントロールにテキストを書き込むことができ、テキストはmodel.myTextに保存する必要があります。
  2. アプリケーションの起動中に、データをモデルにロードして、コントロールにレンダリングする必要があります。
    JavaFX 2.xバインディングを試しましたが、単方向接続に焦点を当てているようです。これをきちんと達成するための私のオプションは何ですか?
4

3 に答える 3

4

1 つの方法は、AFAIKmyTextProperty.bindBidirectional()の代わりに使用することです。myTextProperty.bind()

于 2012-07-04T15:06:04.493 に答える
3

コードは物事をより正確に説明するので、SSCCEサンプルコードをいくつか書きました:)

最初の例はこの質問です:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class JavaFXApplication10 extends Application {

    private Model model = new Model();

    @Override
    public void start(Stage primaryStage) {

        final TextField textField = new TextField();
        textField.setText(model.getMyText());

        Button btn = new Button();
        btn.setText("Done");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                model.setMyText(textField.getText());
                System.out.println("Done.");
                System.out.println("New value: " + model.getMyText());
            }
        });

        BorderPane root = new BorderPane();
        root.setTop(textField);
        root.setBottom(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

    // Data Model
    public static class Model {
        private String myText = "model myText default";

        public String getMyText() {
            return myText;
        }

        public void setMyText(String myText) {
            this.myText = myText;
        }
    }
}

この例の 2 番目の変更バージョン (双方向バインディングを使用) は、こちらです。
どちらの例でも、ボタンをクリックしてみてください。

于 2012-07-04T14:51:24.360 に答える
0

多分あなたはhttps://github.com/laubfall/modelfxを見てください。私はこのライブラリをまさにこの理由で書きました。JavaFX コンポーネント (階層で構成される) と Bean に存在するプロパティの双方向バインディングをサポートします。詳細なドキュメントについては、Github-Project modelfx の Wiki ページを参照してください。お役に立てば幸いです。

ps: コア機能は JavaFX の Bindings.bindBidrectional を使用します。

于 2013-04-02T20:54:51.930 に答える