2017-04-05 152 views
2

我有一個JavaFX的奇怪問題,看起來很像一個錯誤。我要做到以下幾點:使用JavaFX進入和退出應用程序

  • 進入fullscren開始時,我的應用程序
  • 按Escape退出該應用程序(非全屏,整個應用程序)

到目前爲止,我有以下代碼:

public class AppTest extends Application { 

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

    public void start(Stage stage) { 
    stage.setOnCloseRequest(t -> { 
     Platform.exit(); 
     System.exit(0); 
    }); 

    stage.setFullScreenExitHint("Press ESCAPE to exit"); 
    stage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); 
    stage.setFullScreen(true); 

    Rectangle2D screenBounds = Screen.getPrimary().getBounds(); 
    stage.setX(screenBounds.getMinX()); 
    stage.setY(screenBounds.getMinY()); 

    double screenWidth = screenBounds.getWidth(); 
    double screenHeight = screenBounds.getHeight(); 

    stage.setWidth(screenWidth); 
    stage.setHeight(screenHeight); 

    Group root = new Group(); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 

    scene.setOnKeyTyped(event -> { 
     if(event.getCode() == KeyCode.ESCAPE) { 
     stage.close(); 
     } 
    }); 

    Canvas canvas = new Canvas(screenWidth, screenHeight); 
    root.getChildren().add(canvas); 

    GraphicsContext gc = canvas.getGraphicsContext2D(); 

    gc.setFill(Color.BLUE); 
    gc.fillRect(0,0, screenWidth, screenHeight); 

    stage.show(); 
    } 

} 

我在macOS上。

一般來說它會變成全屏。我一般說,因爲這個代碼的真正版本並不總是。有時候,它只是一個最大化的窗口。

然後,當按下轉義,我得到一個最大化的窗口,而不是退出應用程序。

我該如何解決這個問題?

回答

2

變化:

scene.setOnKeyTyped 

要:

scene.setOnKeyReleased 

This解釋了原因。

+0

我非常接近:-)而對於其他人,我會確認'NO_MATCH'是必需的。否則,它不會退出應用程序。 – Henri