gpt4 book ai didi

JavaFX 当组件不可见时填充空白?

转载 作者:行者123 更新时间:2023-12-02 08:21:25 27 4
gpt4 key购买 nike

我使用 Linux Suse 12.3、JDK 1.7.0-45、JavaFX 2.2。

我的问题是:为什么以下代码不起作用以及如何实现切换显示/隐藏功能?

这是我的测试代码:

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();
}
}

我想要的是与谢尔盖对此问题的解决方案相同的效果,但不改变宽度/高度!:

How to solve the overlapping of the controls each other belonging to two different panes

正如我所说,这只是一个测试代码。我尝试使用另一个布局作为 BorderPane 但仍然无法正常工作。我不想手动重新计算尺寸......等等。删除节点并再次添加它对我来说不是一个选择。

我的代码有什么问题吗?欢迎任何想法!谢谢

最佳答案

由于 javadoc 中的提示,使用 BorderPane 填充空白似乎不是一个选项:

BorderPane lays out each child set in the five positions regardless of the child's visible property value; unmanaged children are ignored.

此外,使用 AnchorPane 仅用于可调整大小的内容:

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

似乎是过度使用。仅使用 VBox 将更适合您的布局情况。

重写的测试代码:

@Override
public void start(final Stage stage) {
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);
top.setManaged(false);
}
});
top.getItems().add(button);

VBox inner = new VBox();
inner.getChildren().addAll(top, center);
Scene scene = new Scene(inner, 600, 400);
stage.setScene(scene);
stage.show();
}

现在的问题是;
您将如何实现“显示/隐藏”切换栏的“显示”部分?因为你的问题中没有任何线索。

关于JavaFX 当组件不可见时填充空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com