JavaFX-绝对布局,其中一个组件可以扩展到另一个组件上,而无需移动它

JavaFX-绝对布局,其中一个组件可以扩展到另一个组件上,而无需移动它,javafx,hover,components,position,Javafx,Hover,Components,Position,我有一个组件,具有两种状态“已查看”和“已编辑”。“编辑”后,组件必须显示一些控件并占用更多的水平空间。在一个视图中,我垂直显示了许多组件。我希望“已编辑”组件悬停在其兄弟节点上,这样视图就不会垂直调整大小 All "viewed" One "edited" +--------------------+ +------------------

我有一个组件,具有两种状态“已查看”和“已编辑”。“编辑”后,组件必须显示一些控件并占用更多的水平空间。在一个视图中,我垂直显示了许多组件。我希望“已编辑”组件悬停在其兄弟节点上,这样视图就不会垂直调整大小

              All "viewed"                     One "edited"
              +--------------------+           +--------------------+
              | +----------------+ |           | +----------------+ |
              | | Lorem ipsum    | |           | | Lorem ipsum    | |
              | | dolor.         | |           | | dolor.         | |
              | +----------------+ |           | +----------------+ |
              | +----------------+ |           |+------------------+|
              | | Will be edited | |           ||  I am edited     ||
              | +----------------+ |           ||..................||
              | +----------------+ |           ||  [Cancel] [Save] ||
              | | Will be        | |           |+------------------+|
              | |partially hidden| |           | |partially hidden| |  
              | +----------------+ |           | +----------------+ |
              +--------------------+           +--------------------+
作为JavaFx的新手,我不得不承认我不知道如何做到这一点。我已经读到,“绝对”窗格或
锚烷
可能有助于显示一个组件悬停在另一个组件上。在编辑时,
StackPane
似乎也可用于隐藏或显示组件

你知道有什么东西可以用来达到这种效果吗?或者你能给我一些关于如何构建它的提示吗


坦克很多

这里有一个例子,说明如何使用
堆叠窗格

控制器类:

package example;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;

import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {

    @FXML
    private TextField leftTF, rightTF;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        TextField[] tfs = new TextField[]{leftTF, rightTF};

        for (TextField tf : tfs) {

            // Create and show buttons under the text field on text changed:
            tf.textProperty().addListener((observable, oldValue, newValue) -> {
                VBox vBox = (VBox) tf.getParent();
                if (vBox.getChildren().size() == 1) {
                    Button cancelBtn = new Button("Cancel");
                    Button saveBtn = new Button("Save");
                    HBox hBox = new HBox(cancelBtn, saveBtn);
                    hBox.setStyle("-fx-background-color: lightgrey; -fx-border-color: black; -fx-padding: 3;");
                    hBox.setAlignment(Pos.CENTER);
                    vBox.getChildren().add(hBox);

                    // Lower left and right padding to have more space horizontally:
                    vBox.setPadding(new Insets(5, 3, 10, 3));
                    vBox.toFront();

                    // Remove overlaying box on button click and change padding to original values:
                    Button[] btns = new Button[]{cancelBtn, saveBtn};
                    for (Button btn : btns) {
                        btn.setOnAction(event -> {
                            vBox.getChildren().remove(1);
                            vBox.setPadding(new Insets(5, 10, 10, 10));
                            tf.requestFocus();
                        });
                    }
                }
            });
        }
    }
}
FXML:



将“已查看”和“已编辑”视图放在堆栈窗格中,然后调用
setVisible()
切换您看到的控件。即使控件的
visible
属性为false,也会计算它们的大小。好的,这样可以隐藏/显示控件。但是不调整容器的大小如何?我不想在“编辑”时将组件移到下面“一个人会长大的。哦,好吧,我想我误解了你的意图。除非你发一个帖子,否则你可能得不到多少有用的帮助。这似乎奏效了。但是,最后一个节点“将部分隐藏”与“未编辑”嵌套在同一面板中。所有这些行(“Lorem ipsum dolor.”、“未编辑”和“将部分隐藏”)都应该添加/删除,我希望避免嵌套它们,管理一个列表比管理一个树更容易。