5

したがって、私がやりたいのは、fxmlを使用してカスタム要素を作成し、その要素のいくつかのインスタンスをGridPaneなどのコンテナーに追加することです。@fxmlアノテーターを使用して要素にアクセスしたいので、「new」演算子は機能しません。クローン作成はいいのですが、うまくいきません。for()構造で使用して多くの要素を追加する場合、FXMLLoaderは非常に低速です。コントローラから呼び出すことができるfxml親ノードに参照を書き込むことができれば完璧です。

申し訳ありません...ここで疑似...

public class Controller implements Initializable {

    @FXML
    private VBox stack;

    @FXML
    private Button button;

    @FXML
    private void Change(KeyEvent event) throws IOException {     
        for (int i=0; i<10; i++){
            stack.getChildren().add(button);   
        }
    }

}

VBoxにTHEボタンを追加しても問題ありません。しかし、for-contruct(複数のボタンを追加するため)では失敗します。for構文でnew演算子を使用することもできますが、これが唯一の可能性であるかどうかを知りたいと思います。@FXMLアノテーターを使用してボタンを「取得」し、それを複製するなど、別の方法が必要だと思いました。

4

2 に答える 2

7

同じボタンを何度も追加しようとしているため、失敗すると思います。for ループでは、ループ内のコードが実行されるたびにボタンのインスタンスを作成する必要があります。

何かのようなもの:

@FXML
private void Change(KeyEvent event) throws IOException {     
    for (int i=0; i<10; i++){
        stack.getChildren().add(new Button("test")) ;   
    }   
}

私があなたを誤解している場合はお知らせください。

于 2012-07-30T19:08:03.443 に答える
1

ボタンにアクセスしたい場合は、そのためのクラス変数を作成するだけです。

private Button okButton = null;
private Button cancelButton = null;

initialize() メソッドで、Button を初期化し、コンテナーに追加します。

okButton = new Button("OK");
cancelButton = new Button("Cancel");
stack.getChildren().addAll(okButton, cancelButton) ;

次に、ボタン アクション イベントを処理できます。

cancelButton.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent arg0) {
            try {                    
               //close screen
               ((Button)arg0.getSource()).getScene().getWindow().hide();
            } catch (Exception e) {

            }
        }
    });
于 2012-07-31T02:15:38.033 に答える