2015-10-20 63 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

相關問題