You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX全屏时TextField与VBox宽度不更新问题求助

解决JavaFX全屏时TextField宽度与文本换行宽度无法动态更新的问题

问题根源在于使用了静态常量WIDTH固定元素宽度,没有将元素宽度与容器的动态宽度属性绑定,导致窗口切换全屏时,内部元素无法自动适配新的宽度。以下是具体修复方案:

1. 移除静态宽度常量,让容器自动适配父空间

首先去掉Ce类中固定的静态宽度/高度常量,JavaFX布局容器(如BorderPane)默认会自动填充父容器空间,无需硬编码固定值:

// 移除这两行静态常量
// public static double WIDTH = 990;
// public static double HEIGHT = 525;

同时删除root.setMinSize(WIDTH, (HEIGHT - input.getHeight()));这句硬编码的尺寸设置,让BorderPane自动适应窗口大小。

2. 让TextField占满底部HBox的剩余宽度

修改底部HBox和TextField的配置,让TextField自动填充HBox的剩余空间:

HBox hbox = new HBox();
// 去掉固定prefSize,让HBox自动占满BorderPane底部宽度
// hbox.setPrefSize(WIDTH, 16);
root.setBottom(hbox);

// ... 其他carrot相关代码 ...

// 移除固定minWidth设置
// input.setMinWidth(console.getWidth());
// 添加Hgrow优先级,让TextField占满HBox剩余空间
HBox.setHgrow(input, Priority.ALWAYS);

3. 绑定控制台VBox的宽度到ScrollPane视口宽度

让console这个VBox的宽度跟随ScrollPane的视口宽度变化,确保内部文本容器能适配宽度:

// 在scroll.setContent(console);之后添加绑定
console.prefWidthProperty().bind(scroll.viewportBoundsProperty().map(bounds -> bounds.getWidth()));

4. 修复print方法中的文本容器与换行宽度

修改print方法,让文本容器和换行宽度动态绑定到console的宽度,不再依赖静态常量:

@SuppressWarnings("static-access")
public void print(String s, Color c) {
    Ce Ce = new Ce();
    HBox text1 = new HBox();
    // 移除固定宽度设置,绑定到console宽度
    // text1.setMinWidth(Ce.WIDTH);
    // text1.setMaxWidth(Ce.WIDTH);
    text1.prefWidthProperty().bind(Ce.console.widthProperty());
    
    // ... tCarrot相关代码 ...
    
    Text text2 = new Text();
    // ... 打字机效果代码 ...
    
    // 移除固定wrappingWidth,绑定到console宽度减去偏移量
    // text2.setWrappingWidth(Ce.WIDTH - 40);
    text2.wrappingWidthProperty().bind(Ce.console.widthProperty().subtract(40));
    
    // ... 其他添加子元素代码 ...
}

额外优化:监听窗口全屏状态(可选)

如果需要在全屏切换时做额外调整,可以在主类中监听Stage的全屏属性:

stage.fullScreenProperty().addListener((obs, oldVal, newVal) -> {
    // 全屏切换时的额外逻辑,比如调整字体大小等
});

完成以上修改后,窗口切换全屏时,TextField的宽度会自动填充底部空间,文本的换行宽度也会随控制台宽度动态更新,解决显示异常问题。

内容的提问来源于stack exchange,提问作者Providence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:15:33