首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阶段在创建新控件后会丢失填充(梯度)。

阶段在创建新控件后会丢失填充(梯度)。
EN

Stack Overflow用户
提问于 2016-05-30 10:17:40
回答 1查看 66关注 0票数 1

我已将重新创建的内容简化为以下几个部分。实例化ToggleButton的行会使我的舞台失去填充颜色;它变成白色。我刚刚开始使用JavaFX,所以如果我正在做一些不该做的事情,请告诉我,这里。这是使用jre1.8.0_92与Eclipse (jfx8_2.3.0插件)在Windows7 sp1上。

代码语言:javascript
复制
public class Main extends Application {

    public static void main(String[] args) {

        if(args.length > 0) { 
            String s = args[0].toLowerCase();
            if(s.equals("full"))
                    Machine.isFullScreen = true;
        }
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        Machine.startMachine(primaryStage);
    } 
}

public class Machine {

    static boolean isFullScreen = false;
    static Rectangle2D screenRect, backRect;
    static Stage backStage;
    static Scene backScene;
    static Pane backPane;

    private Machine() {}

    static public void startMachine(Stage primaryStage) {

        // backscreen
        startScene(primaryStage);

        // This line causes the fill to be lost
        ToggleButton foo = new ToggleButton("hi");
    }

    static private void startScene(Stage primaryStage) {

        // Stage
        backStage = primaryStage;
        backStage.initStyle(StageStyle.UNDECORATED);
        backStage.setFullScreen(isFullScreen);
        screenRect = Screen.getPrimary().getBounds();
        if(!isFullScreen) {
            int w = 1000, h = 500, t = 20;
            backStage.setWidth(w);
            backStage.setHeight(h);
            backStage.setX((screenRect.getWidth() - w)/2);
            backStage.setY(t);
        }
        backRect = new Rectangle2D(backStage.getX(), backStage.getY(),
                backStage.getWidth(), backStage.getHeight());

        // Scene
        backScene = new Scene(backPane = new Pane());
        // backScene.getStylesheets().add(Machine.class.getResource("mainStyle.css").toExternalForm());
        // backScene.getRoot().setStyle("-fx-background-color: #CCFF99;");
        backScene.setFill(new LinearGradient(0,0,1,1, true, CycleMethod.NO_CYCLE,
            new Stop[]{
                    new Stop(0,Color.web("#4977A3")),
                    new Stop(0.5, Color.web("#B0C6DA")),
                    new Stop(1,Color.web("#9CB6CF")), } )); 
        // Logo
        Text logo = new Text("AMT");
        logo.setFill(Color.DEEPSKYBLUE);
        Font font = Font.font("Times New Roman", FontWeight.BOLD, FontPosture.ITALIC, 96);
        logo.setFont(font);
        logo.setX(100);
        logo.setY(150);
        backPane.getChildren().add(logo);
        backStage.setScene(backScene);
        backStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
        backStage.show();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-30 11:07:18

setFill() API建议这可能是样式表效应。默认样式表是在实例化第一个Control时静态安装的。如果样式表是Modena,“默认填充设置为浅灰颜色。”不要使用backScene.setFill(),而是按照herehere的建议尝试backPane.setBackground()

代码语言:javascript
复制
// Scene
backPane = new Pane();
backScene = new Scene(backPane);
LinearGradient linearGradient = new LinearGradient(
    0, 0, 1, 1, true, CycleMethod.NO_CYCLE,
    new Stop(0, Color.web("#4977A3")),
    new Stop(0.5, Color.web("#B0C6DA")),
    new Stop(1, Color.web("#9CB6CF")));
backPane.setBackground(new Background(new BackgroundFill(
    linearGradient, CornerRadii.EMPTY, Insets.EMPTY)));

另外,请注意,http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html构造函数参数LinearGradient允许您直接添加Stop实例,而无需创建新的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37523167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档