//fix this/ Javaコードの間違いをさがせ!
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
Articles
Java
Java技術関連記事
Fix This
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
JavaFX で SplitPane コントロールを使用して、2 つの部分からなるユーザー・インタフェースのサイズ比率をユーザーが変更できるようにする必要があります。 問題は、SplitPane 内のディバイダの両側をサイズ変更できるようにするには、どのような方法でノードを追加すれば良いのかという点です。
SplitPane 内のディバイダの両側にボタンを配置する、単純な JavaFX アプリケーションに対する次の start メソッドについて考えてみましょう。
@Override
public void start(Stage stage) {
SplitPane splitPane = new SplitPane();
Button one = new Button("Left Button");
Button two = new Button("Right Button");
splitPane.getItems().addAll(one, two);
Scene scene = new Scene(splitPane, 600, 200);
stage.setScene(scene);
stage.show();
}
このアプリケーションを実行すると、ディバイダの左側は " 左ボタン " で満たされ、ディバイダのすぐ右側が " 右ボタン " になります。どちらかの方向にディバイダをドラッグしようとても、変化はありません。
上記のコードの正しい修正方法を選んでください。
1) ObservableList
2) レイアウトが正しく再計算されるように、SplitPane に対して requestLayout() を呼び出す。
3) 各 Button オブジェクトを別々の Pane 内に配置し、SplitPane にはボタンではなくペインを追加する。
Pane left = new Pane(); left.getChildren().add(one); Pane right = new Pane(); right.getChildren().add(two); stackPane.getItems().addAll(left, right);
splitPane.setDividerPosition(0.5);
正解は 3)です。それぞれのボタンを別々のペイン(StackPane や FlowPane、またはその他のサブクラスでも可)に配置する必要があります。アプリケーションを実行すると、ウィンドウの中央にディバイダが表示され、半分になった SplitPane のそれぞれの左上にボタンが表示されます。