Mat*_*ias 5 java macos javafx menubar scene
当我尝试请求焦点(我在 macOS Mojave 10.14.2 上)时,当用户单击托盘图标菜单中的“显示”按钮时,它不会更改左上角的菜单栏(例如 Chrome -> java),但至少它把它带到了前面。在全屏应用程序中(例如,在全屏模式下单击 Sublime Text 中的托盘图标)时,它根本不会出现,而是显示在主桌面空间中,而不移动到它。
应该成为
但相反
当点击“显示”时...
好像什么也没发生!它会在不获得焦点或出现在顶部的情况下打开,而是出现在主“桌面”空间上。
toFront()我尝试过将其中之一进行组合,requestFocus()或者只进行其中一个,但似乎不起作用。
有人对这个问题有任何修复/解决方法吗?
这是上面用来演示该问题的简单应用程序:
package me.matetoes.dockvisibility;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
public class DockVisibilityTester extends Application {
public javafx.scene.control.Button hideButton;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
hideButton = new javafx.scene.control.Button("Hide");
hideButton.setOnAction(e -> handleHide());
Scene scene = new Scene(hideButton, 200, 100);
primaryStage.setScene(scene);
primaryStage.setTitle("Testing");
Platform.setImplicitExit(false);
createTrayIcon(primaryStage);
primaryStage.show();
}
private void createTrayIcon(final Stage stage) {
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray(); // get the SystemTray instance
Image icon = null;
try { // load an image
URL url = new URL("http://www.digitalphotoartistry.com/rose1.jpg");
icon = ImageIO.read(url);
} catch (IOException ex) {
ex.printStackTrace();
}
stage.setOnCloseRequest(e -> hide(stage)); //hide instead of close
// to be added on "show" MenuItem and trayIcon itself
ActionListener showListener = e -> show(stage);
PopupMenu popup = new PopupMenu(); // create a popup menu
MenuItem showItem = new MenuItem("Show");
showItem.addActionListener(showListener);
MenuItem closeItem = new MenuItem("Close");
closeItem.addActionListener(e -> System.exit(0));
popup.add(showItem);
popup.addSeparator();
popup.add(closeItem);
assert icon != null;
TrayIcon trayIcon = new TrayIcon(icon, "Test", popup); // construct a TrayIcon
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(showListener);
try { // add the tray image
tray.add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
private void hide(final Stage stage) {
Platform.runLater(() -> {
if (SystemTray.isSupported()) {
stage.hide();
} else {
System.exit(0);
}
});
}
private void show(final Stage stage) {
Platform.runLater(() -> {
stage.show();
// doesn't work!
stage.requestFocus();
stage.toFront();
});
}
public void handleHide() {
Stage stage = (Stage) hideButton.getScene().getWindow();
hide(stage);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!:)
小智 0
您可以尝试使用useSystemMenuBar()
就像是
MenuBar mnuBar;
mnuBar.useSystemMenuBar();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |