2015-10-15 86 views
1

有JavaFX的一個問題,即whenI彈出一個新的階段,新的窗口將焦點從任何Windows應用程序與當前焦點了JavaFx停止新窗口偷焦點

我希望它彈出到前面,而不是走專注,所以如果用戶輸入的其他地方,他們可以繼續輸入文字等

在Swing你能解決這個問題的:

dialog.setFocusable(false); 
    dialog.setVisible(true); 
    dialog.setFocusable(true); 

似乎是JavaFX中沒有類似的選項。下面的例子,當你點擊按鈕時,它會彈出一個新的舞臺,注意焦點(注意,我不想要求焦點回來,因爲在真正的應用程序中,用戶可能正在寫電子郵件或在網頁上當彈出發生,它需要不採取焦點從這些活動)

 import javafx.application.Application; 
     import javafx.scene.Scene; 
     import javafx.scene.control.Button; 
     import javafx.stage.Stage; 

    public class Main extends Application { 

     private Stage stage; 

     @Override public void start(Stage stage) { 
      this.stage = stage; 
      stage.setTitle("Main Stage"); 
      stage.setWidth(500); 
      stage.setHeight(500); 


      Button btnPopupStage = new Button("Click"); 
      btnPopupStage.setOnMouseClicked(event -> popupStage()); 
      Scene scene = new Scene(btnPopupStage); 

      stage.setScene(scene); 
      stage.show(); 
     } 

     private void popupStage(){ 
      Stage subStage = new Stage(); 
      subStage.setTitle("Sub Stage"); 
      subStage.setWidth(250); 
      subStage.setHeight(250); 
      subStage.initOwner(stage); 
      subStage.show(); 
      System.out.println("Does main stage have focus : "+stage.isFocused()); 
      System.out.println("Does popup have focus : "+subStage.isFocused()); 
     } 

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

任何想法階段不採取集中了stage.show()?謝謝

回答

0

爲了防止你所描述的假設是你的問題的原因,那麼你需要添加subStage.initModality(Modality.NONE);。但這不是問題,實際上這裏沒有問題,請看這裏

stage.setWidth(500); // your stage is 500 wide 
stage.setHeight(500); // & 500 long 
Scene scene = new Scene(btnPopupStage);// your scene has a parent which is button 
//by inheritance if i should say your button is 500 wide & long. 

你見過這個問題嗎?您的按鈕將始終響應點擊事件,在事件將創建一個新的Stage,因此給予重點Stage

+0

嗨,感謝您的答覆。 默認的Modality是NONE,所以我沒有設置它,並且設置它沒有區別。 我不確定我是否清楚該問題。我希望有一個新的舞臺出現,但我不希望重點關注它,我希望集中精力保持它的位置。 我沒有設置按鈕的大小,因爲它只是一個快速演示,使命令上的另一個階段彈出。 – user486415

1

只要incase任何人正在搜索,我找不到解決方案,但我發現有人有同樣的問題誰提高了OpenJDK的一票 https://bugs.openjdk.java.net/browse/JDK-8090742

繞過它不幸的是我把JavaFX的窗格中的Swing的JFrame裏面,只是叫

dialog.setFocusableWindowState(false); 
dialog.setVisible(true); 
dialog.setFocusableWindowState(true); 

具有固定的焦點盜竊問題,但不知道在影響在Swi中擁有JFx ng JFrame。

如果有人發現JFx中一個新窗口的非焦點竊取方式讓我知道。
謝謝