我使用的是一个里面有TextField的JavaFX Popup窗口,我试图缩小TextField的宽度,但Popup阻止了这一点,相反,TextField总是增长到Popup的宽度.

public class InputPopup extends Popup {

  public InputPopup() {
    VBox vBox = new VBox();
    vBox.setPrefWidth(200);
    vBox.setPrefHeight(200);
    vBox.setPadding(new Insets(15));
    vBox.setSpacing(10);
    vBox.setAlignment(Pos.CENTER);

    Button closeBtn = new Button("Close");
    closeBtn.setOnAction(e -> this.hide());

    TextField textField = new TextField();
    textField.setMaxWidth(40.0);
    textField.setPrefWidth(40.0);
    textField.setMinWidth(40.0);

    vBox.getChildren().addAll(textField, closeBtn);
    getContent().add(vBox);
  }
}

我试过用setPrefWidthsetPrefSizesetMinSizesetMaxSize.我试过把它装进HBox.当它在Popup的窗口内时,似乎什么都不起作用.我能做些什么来解决这个问题?

编辑

原来团队中的其他人推送了我的代码正在读取的一个css文件,出现了一个覆盖所有内容的css问题,我的代码是正确的,但我没有发现css错误,很抱歉没有发现它,谢谢你的帮助!

推荐答案

还可以try 设置Popup的宽度和高度.另一种 Select 是使用Control.USE_PREF_SIZE.应该能行得通.

密钥码

this.setWidth(250);
this.setHeight(250);

this.setWidth(Control.USE_PREF_SIZE);
this.setHeight(Control.USE_PREF_SIZE);

完整代码

主要

imp或t javafx.application.Application;
imp或t javafx.scene.control.Button;
imp或t javafx.scene.Scene;
imp或t javafx.scene.layout.StackPane;
imp或t javafx.stage.Stage;


public class App extends Application
{
    @Override
    public void start(Stage primaryStage)
    {
        输入弹出窗口 inputPopup = new 输入弹出窗口();

        Button button = new Button("Press me");
        button.setOnAction(actionEvent -> {
            if (!inputPopup.isShowing()) 
                     inputPopup.show(primaryStage); 
                 else
                     inputPopup.hide(); 
        });

       Scene scene = new Scene(new StackPane(button), 400, 400);
       primaryStage.setTitle("Rocket");
       primaryStage.setScene(scene);
       primaryStage.show(); 
    }
}

输入弹出窗口

imp或t javafx.geometry.Insets;
imp或t javafx.geometry.Pos;
imp或t javafx.scene.control.Button;
imp或t javafx.scene.control.TextField;
imp或t javafx.scene.layout.VBox;
imp或t javafx.stage.Popup;

public class 输入弹出窗口 extends Popup {

  public 输入弹出窗口() {
    VBox vBox = new VBox();
    vBox.setPrefWidth(250);
    vBox.setPrefHeight(250);
    vBox.setPadding(new Insets(15));
    vBox.setSpacing(10);
    vBox.setAlignment(Pos.CENTER);

    Button closeBtn = new Button("Close");
    closeBtn.setOnAction(e -> this.hide());

    TextField textField = new TextField();
    textField.setMaxWidth(40.0);
    textField.setPrefWidth(40.0);
    textField.setMinWidth(40.0);

    vBox.getChildren().addAll(textField, closeBtn);
    getContent().add(vBox);
    this.setWidth(250);
    this.setHeight(250);
    vBox.setStyle("-fx-background-col或: yellow");
  }
}

输出

enter image description here

Java相关问答推荐

如何用javac编译Java类,即使对像java.lang.*这样的基本类也没有任何依赖关系?

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

Java:根据4象限中添加的行数均匀分布行的公式

Spring Boot 3.2.2中的@Inject和@Resource Remove

获取字符串中带空格的数字和Java中的字符

Mac上的全屏截图在使用JavaFX时不能正常工作吗?

把一条整型短裤和两条短裤装成一条长的

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

如何仅使用键/ID的一部分(组合)高效地返回映射值?

如何在代码中将行呈现在矩形前面?

虚拟线程应该很快消亡吗?

允许同时执行两个方法,但不能同时执行这两个方法

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

在settings.gradle.kts和Build.gradle.kts中使用公共变量

如何用内置Java从JavaFX应用程序中生成.exe文件?

Java堆中的许多java.time.ZoneRegion实例.ZoneId实例不应该被缓存吗?

STREAMS减少部分结果的问题

try 使用预准备语句占位符获取信息时出现Try-With-Resources错误

JavaFX中ListView中的问题

Vaadin Flow:设置密码显示按钮属性