2015-10-20 64 views
2

我已经在谷歌和这里搜索了几个小时,但没有找到任何解决此问题的答案。我想创建一个只包含图标的应用程序。它没有任何目的。这只是为了练习JavaFX。但我不明白为什么有一个可见的窗口,即使我将其设置为透明。有没有办法阻止透明Stage + Scene显示前几毫秒?

正如你所见,here,这就是我想要做的。这是,它应该看起来像我启动应用程序一样(正如我所说,这只是一个随意的图标,没有任何目的......仍在学习,这是我的实践项目)。但由于某种原因,它会加载舞台/场景几毫秒,这将产生“一次闪烁”的效果。 This是窗户的样子。这只是舞台/场景,我是如何设置它的(这是很大的看到它更清晰,它是一半tranparent,因为它太快,我不能创建一个更好的屏幕截图:(),但没有透明设置。我有:

public class MainNotification extends Application { 

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

@Override 
public void start(Stage primaryStage) throws Exception { 
    primaryStage = new Stage(StageStyle.TRANSPARENT); 
    GridPane pane = new GridPane(); 
    Scene scene = new Scene(pane); 
    scene.setFill(Color.TRANSPARENT); 
    primaryStage.setScene(scene); 
    TestPloppingWindow.build(primaryStage); 
    primaryStage.show(); 
} 

}

和:

public class TestPloppingWindow { 

private static boolean isBuild; 
private static double posX = 100; 
private static double posY = 100; 

public static Stage build(Stage stage) { 
    if (!isBuild()) { 
     GridPane pane = (GridPane) stage.getScene().getRoot(); 
     ImageView image = new ImageView(
       new Image(MainNotification.class.getResourceAsStream("/Ressource/icon.png"), 100, 100, 
         true, true)); 
     image.setOnMouseClicked(e -> { 
      biggerIcons(); 
     }); 
     pane.getChildren().add(image); 
     pane.setAlignment(Pos.CENTER); 
     stage.setScene(stage.getScene()); 
     pane.setPrefSize(500, 250); 
     setBuild(true); 
    } 
    return stage; 
} 

public static void biggerIcons() { 
    Stage stage = new Stage(StageStyle.TRANSPARENT); 
    stage.setX(posX = posX + 100); 
    stage.setY(posY = posY + 100); 
    GridPane pane = new GridPane(); 
    Scene scene = new Scene(pane, Color.TRANSPARENT); 
    stage.setScene(scene); 
    ImageView view = new ImageView(
      new Image(TestPloppingWindow.class.getResourceAsStream("/Ressource/icon.png"))); 
    pane.getChildren().add(view); 
    stage.show(); 
} 

public static boolean isBuild() { 
    return isBuild; 
} 

private static void setBuild(boolean isBuild) { 
    TestPloppingWindow.isBuild = isBuild; 
} 

}

每当我点击小图标,一个更大的将显示(biggerIcons())和对,我没有这个问题。它平稳地消失,没有任何舞台/场景眨眼问题。有谁知道如何解决这个问题?

+0

我敢打赌,那是因为你正在做的'primaryStage =新阶段(...)'。你可以尝试'primaryStage.initStyle(StageStyle.TRANSPARENT);'而不是看看会发生什么? –

+0

Nope :(没有工作,不幸的是 – Ulli

回答

0

你好先生这段代码stage.setScene(stage.getScene());,我发现很难理解,也验证码

if (!isBuild()) { 

    .... 

    setBuild(true); 
} 
return stage; 

这里给我这个逻辑不是很(我不明白)。无需返回Stage

它会加载一个阶段/场景,这将创造因为这stage.setScene(stage.getScene());

它的一个“一次性闪烁”的效果删除它,它不是一个几毫秒在你的代码是有用的,它只是会取消StageScene并重新将其设置

希望它可以帮助

+0

试过了..但不幸的是它不工作..即使是最简单的代码没有任何方法来显示一个简单的图标不会显示没有这种眨眼效果..有人在Twitter上说这是一些Linux发行版的错误..在家用电脑上试用后,我认为他是对的......在Windows和Mac上,这种情况没有发生,所以这是一些Linux发行版的Bug(我使用了OpenSuse,他使用Arch Linux ...两个x64 ..都有错误) – Ulli

相关问题