JavaFX:将多个 Hbox 添加到选项卡中的内容时出错

标签 java javafx styling hbox

我正在尝试创建一个用于文件加密的 JavaFX 应用程序,我对 JavaFX 还很陌生,所以我仍在学习诀窍。我目前的问题是,我需要将 Hbox1 和 HBox2 添加到名为 tabEnc 的选项卡中的内容。目前,我收到错误“Children:检测到循环”,据我了解,正在创建循环依赖项。我已经尝试了很多次来修复它,但也许我忽略了一些东西,任何帮助将不胜感激。

出现的错误如下:
线程“JavaFX 应用程序线程”java.lang.IllegalArgumentException 中出现异常:子级:检测到循环:父级 = TabPane@6f5ca7e2[styleClass=tab-pane],节点 = TabPaneSkin$TabContentRegion@2d7c1f31[styleClass=tab-content-area]

基本上,红线位于下面的屏幕截图中,我希望那里的标签是“选择文件”,该标签包含在与文本字段和其下方按钮不同的 Hbox 中,因为它们应该包含在另一个 Hbox 中.

如果我的问题缺少任何内容,请告诉我,我会相应修改。

enter image description here

Main.java

import javafx.application.Application;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import java.security.Security;

public class Main extends Application {

    private Style clientStyle = new Style();
    @Override
    public void start(Stage primaryStage) {

        primaryStage.setScene(clientStyle.getScene());
        primaryStage.setTitle("NTH Secure");
        primaryStage.getIcons().add(new Image(("styles/lock.png")));
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    public static void main(String[] args) {
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        launch(args);
    }
}

样式.java

import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;


// A class containing the UI elements of the program
public class Style {
    private Scene scene;
    private TabPane tabPane;
    private String dir = System.getProperty("user.dir")+"/testFiles";

    public Style(){

        BorderPane root = new BorderPane();
        scene = new Scene(root, 500, 300);
        scene.getStylesheets().add(getClass().getResource("styles/application.css").toExternalForm());
        tabPane = new TabPane();
        root.setCenter(tabPane);


        //Tab for encryption
        Tab tabEnc = new Tab("Encrypt");
        tabEnc.setClosable(false);
        //PasswordField passwordTxt = new PasswordField();
        Label selectLabel = new Label("Select File");
        HBox hbox1 = new HBox(selectLabel);
        hbox1.setPadding(new Insets(20, 20, 20, 20));
        hbox1.setSpacing(10);

        TextField fileLabel = new TextField("");
        fileLabel.setEditable(false);
        Button buttonFile = new Button("Select");
        Button buttonClear = new Button("Clear");
        buttonClear.setPrefWidth(70);
        buttonFile.setPrefWidth(80);
        fileLabel.setPrefWidth(350);
        HBox hbox2 = new HBox(fileLabel, buttonFile, buttonClear);
        hbox2.setPadding(new Insets(20, 20, 20, 20));
        hbox2.setSpacing(10);
        root.getChildren().addAll(hbox1, hbox2);
        tabEnc.setContent(root);

        //Tab for decryption
        Tab tabDec = new Tab("Decrypt");
        tabDec.setClosable(false);

        //Tab for information
        Tab tabInf = new Tab("About");
        tabInf.setClosable(false);

        tabPane.getTabs().addAll(tabEnc, tabDec, tabInf);

    }

    public Scene getScene(){
        return this.scene;
    }

}

最佳答案

所以我设法解决了这个问题。我犯了一个小错误:我应该将它们封装到 Vbox 中,如下所示:

VBox vbox = new VBox(); 
vbox.getChildren().addAll(hbox1, hbox2); 
tabEnc.setContent(vbox); 

关于JavaFX:将多个 Hbox 添加到选项卡中的内容时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72899212/

相关文章:

java - Spring MVC 中如何使用 IoC 和 DI

java - 我如何从Java对象获取信息?我可以进一步简化我的代码吗?

JavaFX:位置未设置

wpf - 管理用户可编辑的 WPF 样式

java - 一个变量可以在一条语句中递增多少次?

java - 当值保持不变时,向 ComboBox 添加更改监听器

javafx-2 - JavaFX/如何在启动时加载/填充值?

ios - UIAppearance 边缘插入

android - 样式在 React Native 中无法正常工作

java - RabbitMQ 的 Servlet 端点