JavaFX有一个问题,当我弹出一个新阶段时,该新窗口将从具有当前焦点的任何Windows应用程序中获取焦点
我希望它弹出到前面,但不对焦,所以如果用户在其他地方打字,他们可以继续打字等。
在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不要把焦点放在stage.show()上有什么想法?谢谢
为了防止你所描述的内容,假设是你问题的原因,那么你需要添加 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.
你看到问题了吗?您的按钮将始终响应单击事件,这将创建一个新的舞台
,因此将重点放在那个舞台
上
以防万一有人正在搜索,我找不到解决方案,但我找到了一个有同样问题的人,他为openjdk https://bugs.openjdk.java.net/browse/JDK-8090742
不幸的是,为了解决这个问题,我将JavaFX窗格放在Swing JFrame中,并调用了
dialog.setFocusableWindowState(false);
dialog.setVisible(true);
dialog.setFocusableWindowState(true);
这已经解决了焦点窃取问题,但不确定在Swing JFrame中使用JFx的影响。
如果有人在JFx中发现新窗口的非焦点窃取方式,请告诉我。
谢谢
有什么方法可以防止新舞台抢走主舞台的焦点? 我指的是每个新的<代码>阶段。show() 从我的主舞台上偷走了焦点。 我不想把我的JavaFX和Swing混在一起,所以没有将内容嵌入JFrame的选项。此外,这将是伟大的不使用任何弹出,只是纯粹的阶段。 有什么外部库允许我这么做吗?
当我将RecycerView放入嵌套的scrollview中时,屏幕总是跳到RecycerView的顶部,而不是页面的顶部。这里有一个简单的例子。 在这个示例中,我在Recyview上有一个350dp高的空视图,因为您需要在Recyview上有一些内容才能明显显示出来。Recyview iteself包含100个虚拟文本视图。 启动活动后,滚动位于Recyview的顶部,而不是页面的顶部。这一定是
查看这段代码,它们展示了一种在登录后显示新窗口的方法。当用户名和密码是正确的,它打开新的对话框。我想要一个按钮点击打开新的对话框,而不检查用户名和密码。
本文向大家介绍JS打开新窗口防止被浏览器阻止的方法,包括了JS打开新窗口防止被浏览器阻止的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS打开新窗口防止被浏览器阻止的方法。分享给大家供大家参考。具体分析如下: 用传统的window.open()方式打开新窗口,会被浏览器阻止,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢?其实办法还是有的,这里我们就来分析一下如何解决这个问题
当我试图单击位于弹出菜单后面的按钮时,我收到以下错误消息。 此错误消息能够识别阻止我单击的内容的名称 我如何获得这个名称(作为一个元素),以便进行修改, 等待功能不适用,因为此弹出窗口不会消失。我试过网络驱动程序。ActionChains,但它不能解决这个问题
我有A. fxml和B. fxml。运行Java应用程序覆盖启动方法。我想每40分钟循环(5次){打开新阶段B. fxml并等待stage.close,如果阶段关闭继续循环打开新阶段B fxml。循环五次。我尝试定时器timerment我不能。我尝试JavaFX服务我不能。我创建My线程扩展线程对象。这一次,我无法控制下一阶段的循环。当用于声明开始打开5阶段。但是我想循环等待当前阶段关闭,然后进入