2015-10-15 87 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中一个新窗口的非焦点窃取方式让我知道。
谢谢