You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaFX添加按钮后场景黑色背景变白问题求助

解决JavaFX添加按钮后场景背景变黑失效的问题

我来帮你搞定这个问题!你遇到的场景背景从黑色变成白色的情况,核心原因是根容器Pane没有完全填充整个Scene的空间,再加上布局方式的问题,导致添加按钮后背景色无法铺满整个窗口。另外你创建的按钮目前还没被添加到任何父容器里,这也是个小疏漏哦。

具体修复方案:

  • 换用自动填充空间的根容器Pane默认不会自动占满整个Scene,换成StackPane或者让Pane的大小绑定到Scene的大小,这样背景色才能铺满窗口。
  • 把按钮加入布局容器:你创建了按钮但没把它加到任何容器里,得把它放到合适的布局中(比如和文本、圆形一起加入VBox)。
  • 尽量避免手动设置布局坐标:用JavaFX的布局容器(比如VBox、StackPane)来管理元素位置,比手动设layoutX/Y更稳定,也能避免布局混乱。

修改后的完整代码:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class AdventureGame extends Application {
    // 假设这是你定义的resultat变量
    private int resultat = 0;

    @Override 
    public void start(Stage teater) {
        teater.setTitle("Adventure Game");
        
        Circle circle = new Circle(200, 100, 30);
        circle.setFill(Color.WHITE);
        
        Text text = new Text(Integer.toString(resultat));
        text.setFont(Font.font("Calibri", 25));
        text.setFill(Color.BLACK);
        
        // 用StackPane把圆形和文本叠在一起
        StackPane circleTextPane = new StackPane(circle, text);
        
        Text titleText = new Text("Adventure Game");
        titleText.setFont(Font.font("Edwardian Script ITC", 50));
        titleText.setFill(Color.WHITE);
        
        Button exitButton = new Button("Avslutt");
        exitButton.setTextFill(Color.WHITE);
        // 给按钮加个深灰背景,避免和黑色场景融合看不清
        exitButton.setStyle("-fx-background-color: #333333;");
        
        // 用VBox垂直排列标题、圆形文本和按钮,设置元素间距
        VBox contentBox = new VBox(20, titleText, circleTextPane, exitButton);
        // 让所有元素在VBox里居中
        contentBox.setAlignment(Pos.CENTER);
        
        // StackPane作为根容器,会自动占满整个Scene的空间
        StackPane rootPane = new StackPane(contentBox);
        
        Scene scene = new Scene(rootPane, 400, 200, Color.BLACK);
        
        teater.setScene(scene);
        teater.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

问题根源解释:

你原来的Pane没有设置大小,也没有绑定到Scene的尺寸,即使场景本身设了黑色背景,容器没铺满的区域会显示默认的白色。当你添加按钮后(我猜你实际代码里把按钮加到了容器中),布局容器的范围没有覆盖整个窗口,就导致背景色失效了。另外手动设置layoutX/Y会让元素脱离布局容器的管理,容易出现布局错位,同时也会让容器无法正确拉伸。

这样修改后,不管有没有按钮,场景背景都会稳稳保持黑色,所有元素也会整齐居中显示~

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

火山引擎 最新活动