[英]How to get AWT Window for JavaFX Stage?
Java Taskbar API 包括一個用於設置窗口進度狀態的選項。
不幸的是,該 API 正在尋找 java.awt.Window。 是否有用於訪問 java.awt.Window 以從 javafx.stage.Stage/Window 傳遞到此方法的首選 API?
誠然,這是一個非常粗略的解決方案,但如果有幫助,我會留在這里。
據我所知,僅靠 JavaFX 是不可能的。 但是,我們可以利用一些兼容性來實現您想要的。
java.awt.Window
,它被您鏈接的方法接受 - setWindowProgressState(Window,Taskbar.State state)
。 以下javax.swing
類的實例可以傳遞給您鏈接的方法: javax.swing.JDialog
、 javax.swing.JFrame
、 javax.swing.JWindow
、 javax.swing.Popup
通過鏈接與各種 Java UI 框架的互操作性,您可以設置 Windows 任務欄狀態。
這是一個演示:
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javax.swing.*;
import java.awt.*;
public class Test {
public static void main(String[] args) {
// initialize a Swing application
JFrame frame = new JFrame("JavaFX with Swing abuse");
// create a Swing compatible JavaFX container
JFXPanel fxPanel = new JFXPanel();
// initialize JavaFX container
StackPane root = new StackPane();
Scene scene = new Scene(root, 600, 400, Color.ALICEBLUE);
// add elements
Button button = new Button();
button.setText("Say 'Hello World'");
button.setOnAction(event -> System.out.println("Hello World!"));
root.getChildren().add(button);
fxPanel.setScene(scene);
// configure Swing JFrame
frame.add(fxPanel);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// use Awt compatibility with Swing
Taskbar taskbar = Taskbar.getTaskbar();
taskbar.setWindowProgressState(frame, Taskbar.State.ERROR);
taskbar.setWindowProgressValue(frame, 50);
}
}
我不能說我推薦這個,但無論如何,這是可能的。 但是,可能存在一些限制:
與 Swing 不同,JavaFX 不使用 AWT 創建窗口。
您可以將 JavaFX Scene
嵌入到 Swing 應用程序中,如下所示:
// On EDT:
JFrame frame = new JFrame();
JFXPanel jfxPanel = new JFXPanel();
frame.setContentPane(jfxPanel);
// On JavaFX Application Thread:
jfxPanel.setScene(new Scene(...));
然后, JFrame
擴展java.awt.Frame
,它是一個java.awt.Window
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.