4

Linux Suse 12.3、JDK 1.7.0-45、JavaFX 2.2 を使用しています。

私の質問は: なぜ次のコードが機能しないのか、toggleShow/hide 機能を実装する方法は?

ここに私のテストコードがあります:

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.ToolBar;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;

public class Test extends Application {
    public static void main(String[] args) { 
        launch(args); 
    }

    @Override
    public void start(final Stage stage) {
        AnchorPane root = new AnchorPane();


        BorderPane inner = new BorderPane();

        AnchorPane.setTopAnchor(inner, 0.0);
        AnchorPane.setRightAnchor(inner, 0.0);
        AnchorPane.setBottomAnchor(inner, 0.0);
        AnchorPane.setLeftAnchor(inner, 0.0);

        final HTMLEditor center = new HTMLEditor();

        final ToolBar top = new ToolBar();
        final Button button = new Button("hide");
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent t) {
                top.setVisible(false);
                //center.setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE);
            }
        });     

        center.setManaged(false);
        top.getItems().add(button);
        //top.managedProperty().bind(top.visibleProperty());
        top.setManaged(false);

        inner.setTop(top);
        inner.setCenter(center);

        root.getChildren().add(inner);
        Scene scene = new Scene(root,600,400);
        stage.setScene(scene);
        stage.show();
    }
}

私が欲しいのは、この質問に対するセルゲイのソリューションと同じ効果ですが、幅/高さを変更することはありません!:

2 つの異なるペインに属するコントロール同士の重なりを解決する方法

私が言ったように、それは単なるテストコードです。別のレイアウトを BorderPane として使用しようとしましたが、まだ機能しません。サイズを手動で再計算したくない...など。ノードを削除して再度追加することは、私にとっては選択肢ではありません。

私のコードで何が問題になっていますか? どんなアイデアでも大歓迎です!ありがとう

4

2 に答える 2

0

行を削除してからtop.setManaged(false);、ツールバーを次のGroupようなオブジェクトに配置してみてください。

    Group g = new Group();
    Region spacer = new Region();
    spacer.setPrefWidth(10000);
    spacer.setMinWidth(100);    
    top.getItems().add(spacer);
    g.getChildren().add(top); //Toolbar here...
    inner.setTop(g); //set Group into Borderpane instead of the toolbar

ボタンをクリックした後、空き領域は HTML エディタによって完全に消費されます。

于 2013-11-12T10:50:36.733 に答える