1

Swingには、コンテナとは別のLayoutManagerがありました。私の知る限り、JavaFXはそれを行いません。

私はノードの複雑な構造を持っており、ユーザーがいくつかの異なるレイアウトアプローチを切り替えられるようにしたいと考えています。ユーザーがフローとすべてのコンテナを指定するのと同等のものが、FlowPanesと同等のものに変換されます。次に、彼らは垂直を選択することができ、すべてが垂直に配置されます。

ノードを交換したり、構造全体を再作成したりする以外に、これを行う方法はありますか?

注意する必要があります。階層は実行時に変更され、深くネストされています。

Swingについて言及するのは、階層全体のすべてのコンテナーのリストを維持し、単純なループ(またはリストなしのツリートラバーサル)で新しいLayoutManagerを設定することで、Swingで簡単に実行できるためです。レイアウトの動作はノードの内部にあるように見えるため、JavaFXにはこの可能性がないようです。

4

2 に答える 2

0

このようなものは機能していませんか?

AnchorPane main=new AnchorPane();
AnchorPane sub1=new AnchorPane();
sub1.getChildren().add(btn);
main.getChildren().add(sub1);

レイアウトを切り替えたいとき

AnchorPane sub2=new AnchorPane();
main.getChildren().remove(sub1);
main.getChildren().add(sub2);

編集 私はあなたがレイアウトをしている方法を逃したと思います。これが私が思い描いた方​​法です。

Definitions to Various Components
MainLayout

-> CustomLayout 1
     -> References to various components.  ( Essentially you are not creating all the components for every layout, rather you are referring to them in each layout )
-> CustomLayout 2
     -> References to various components. ( More or less a different arrangement of the same components, adds some component references and removes some )
-> CustomLayout 3
     -> References to various components.

大胆な発言をしますが、JavaFXにツールがあった場合、これを自動的に行うにはどうすればよいでしょうか。各テンプレートは、特定のコンポーネントをレンダリングする場所を知る必要があります。これを行う最も簡単な方法は、コンポーネントを異なるレイアウトに配置する新しいテンプレートを作成し、ユーザーが別のレイアウトを表示したいときにテンプレートを交換することです。

于 2013-01-04T20:18:01.360 に答える
0

これはSwingで行うのは簡単ではありません。レイアウトが非常に単純でない限り、個々のコンポーネントにすべてのレイアウト制約を再度設定する必要があります。

スイングとjavaFXの間でこれに大きな違いがあるのか​​わかりません。JavaFXでは、同じコントロールを別のコンテナ(VBox、HBoxなど)に追加する必要がありますが、それでも毎回コントロールを再作成する必要はありません。ノード階層の真ん中にコンテナを見つけるのは少し厄介ですが、ある種のエレガントな再帰的解決策があると確信しています:)

于 2013-01-05T19:02:02.913 に答える