【问题标题】:JavaFX: Undecorated WindowJavaFX:未装饰的窗口
【发布时间】:2011-12-29 01:49:24
【问题描述】:

我正在尝试发出 Windows PC Toast 通知。现在我混合使用 Swing 和 JavaFX,因为我没有找到用 FX 制作未装饰窗口的方法。我更喜欢只使用 JavaFX。

那么,我怎样才能制作一个没有装饰的窗户呢?

编辑:我发现你可以直接用new Stage(StageStyle.UNDECORATED)创建一个舞台。

现在我只需要知道如何初始化工具包,这样我就可以在MyApplication 中调用我的start(Stage stage) 方法。 (其中extends Application

我通常调用Application.launch(MyApplication.class, null),但这使我无法创建Stage 和初始化Toolkit

那么我该如何做这些事情才能让我直接使用start(new Stage(StageStyle.UNDECORATED))呢?

【问题讨论】:

  • 出于安全原因,这不太可能。
  • 安全原因? Swing 有这个能力。为什么 JavaFX 会有所不同?
  • 因为它在浏览器中运行并且可能被用来伪造系统弹出窗口。 (我对JavaFX知之甚少)
  • 哦。我的 JavaFX 应用程序是一个桌面应用程序。它不在浏览器上运行。但 FX 可以在浏览器上运行。

标签: java windows javafx toast javafx-2


【解决方案1】:

我不明白您初步调用 start() 方法将阶段设置为未装饰的动机,但以下代码应该可以实现您想要实现的目标。

package decorationtest;

import javafx.application.Application;
import javafx.stage.StageStyle;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class DecorationTest extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        primaryStage.initStyle(StageStyle.UNDECORATED);

        Group root = new Group();
        Scene scene = new Scene(root, 100, 100);

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

【讨论】:

  • 好吧,它制作了一个未装饰的框架,但它也将其广告到任务栏。我想我想要的是一个没有父母的弹出窗口?
  • 如果不与 Swing 混合,这似乎不起作用。一个解决方案是为托盘图标制作一个基于 Swing 的包装应用程序。
  • @Dorothy 这真的很老了,但为了以后的访问者着想,在Stage 上调用initOwner() 并传递对主阶段的引用将阻止通知的阶段被添加到任务中吧。
猜你喜欢
  • 2015-03-21
  • 2017-12-05
  • 2014-06-27
  • 2013-08-12
  • 2015-02-16
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多