Netbeans 同时显示两个窗口“;全屏显示“;使用JavaFx场景生成器2.0
我正在开发一个小型应用程序,我需要同时向用户显示两个窗口,但全屏显示(该应用程序将在双屏上为用户制作) 我正在NetBeans 8.0.1上使用JavaFx场景生成器2.0 我试过了,但只有第二个窗口全屏显示Netbeans 同时显示两个窗口“;全屏显示“;使用JavaFx场景生成器2.0,netbeans,javafx,javafx-2,scenebuilder,Netbeans,Javafx,Javafx 2,Scenebuilder,我正在开发一个小型应用程序,我需要同时向用户显示两个窗口,但全屏显示(该应用程序将在双屏上为用户制作) 我正在NetBeans 8.0.1上使用JavaFx场景生成器2.0 我试过了,但只有第二个窗口全屏显示 public void showTwoScreens() { try { Parent root = FXMLLoader.load(getClass().getResource("ClientsOperationsWindow.fxml")); S
public void showTwoScreens() {
try {
Parent root = FXMLLoader.load(getClass().getResource("ClientsOperationsWindow.fxml"));
Scene scene = new Scene(root);
globalStage.setScene(scene);
globalStage.setFullScreen(true);
globalStage.setResizable(true);
globalStage.show();
Stage anotherStage = new Stage();
Parent secondRoot = FXMLLoader.load(getClass().getResource("ClientsSearchWindow.fxml"));
Scene secondStage = new Scene(secondRoot);
secondStage.setScene(anotherScene);
secondStage.setFullScreen(true);
secondStage.show();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
可以全屏显示两个窗口吗
谢谢大家! 我认为不能同时在两台显示器上全屏设置两个阶段,但通过强制设置阶段维度,可以得到相同的结果 为此,我们将使用
javafx.stage.Screen
,来获取所连接的每个不同监视器的特性。然后我们将fxml文件加载到每个场景,并在其舞台上显示每个场景。使用Screen.getBounds()
我们现在可以看到矩形的原点和尺寸,参考主屏幕。所以我们用这些矩形的边界设置每个阶段的边界。最后,我们将样式设置为“未装饰”。现在唯一缺少的功能是退出“全屏”模式组合键
private Screen secondaryScreen;
@Override
public void start(Stage primaryStage) throws IOException {
Screen primaryScreen = Screen.getPrimary();
Parent root = FXMLLoader.load(getClass().getResource("Screen1.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
Rectangle2D bounds = primaryScreen.getBounds();
primaryStage.setX(bounds.getMinX());
primaryStage.setY(bounds.getMinY());
primaryStage.setWidth(bounds.getWidth());
primaryStage.setHeight(bounds.getHeight());
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.show();
// look for a second screen
Screen.getScreens().stream()
.filter(s->!s.equals(primaryScreen))
.findFirst().ifPresent(s->secondaryScreen = s);
if(secondaryScreen!=null){
Stage secondaryStage = new Stage();
Parent root2 = FXMLLoader.load(getClass().getResource("Screen2.fxml"));
Scene scene2 = new Scene(root2);
secondaryStage.setScene(scene2);
Rectangle2D bounds2 = secondaryScreen.getBounds();
secondaryStage.setX(bounds2.getMinX());
secondaryStage.setY(bounds2.getMinY());
secondaryStage.setWidth(bounds2.getWidth());
secondaryStage.setHeight(bounds2.getHeight());
secondaryStage.initStyle(StageStyle.UNDECORATED);
secondaryStage.show();
}
}
我认为这是不可能的。我在Mac电脑上测试了一些想法。在Java 1.8.0_20及更早版本中,JDK的Mac实现使用它自己的全屏实现,但强制使用独占模式,因此如果使用全屏,则只有一个窗口可以激活。Java 1.8.0_40(使用早期访问版本)使用本机操作系统全屏模式。在这个版本中,如果我在两个阶段调用
setFullScreen(true)
,我会看到第一个阶段在第二个阶段进入时退出全屏模式,所以我猜操作系统在这里强制执行独占性。我不知道Windows上会发生什么,但我想会是一样的。谢谢!我尝试了你的建议,但效果不错:)除了“primaryStage.initStyle(StageStyle.UNDECORATED);”和“secondaryStage.initStyle(StageStyle.UNDECORATED);”这些行在应用程序执行期间引发了异常,所以我不得不将它们从代码中删除;)