如何使我的 Java 应用程序与 Unity 全局菜单兼容?

如何使我的 Java 应用程序与 Unity 全局菜单兼容?

我喜欢用 Java 进行开发,但也希望兼容全局菜单?有办法吗?请帮忙。

答案1

有一个图书馆叫java-gnome(java gtk 包装器)可让您的应用像所有原生应用一样运行。它为应用提供了所有功能:原生小部件、全局菜单等。

该库可在 ubuntu 存储库中找到:

该库的目标是开发丰富的 Java + Gnome 体验。请注意,如果您使用此库,您的应用程序将失去 Java 的多平台功能(因为它将与 java-gnome 绑定)。

这是一个显示菜单集成的示例应用程序(附带 java-gnome):

示例应用程序

答案2

尝试 Ayatana。您可以在此处找到说明: http://hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-applications-with-unity-global-menu-in-ubuntu-12-04/

您所要做的就是导入 Java Ayatana 库并在主 JFrame 类中调用它。这实际上意味着在您的代码中添加以下几行(以及导入 Ayatana 类):

if (AyatanaDesktop.isSupported())
      ApplicationMenu.tryInstall(mainFrame);

以下是一个例子:

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import org.java.ayatana.ApplicationMenu;
import org.java.ayatana.AyatanaDesktop;
public class MyAppWithUnityMenu {
public MyAppWithUnityMenu () {
    JFrame mainFrame = new JFrame("This app integrates in Unity menu bar");
// set up mainFrame, by adding components, etc.
    JPanel panel = new JPanel();
    panel.add(new JLabel("This is a sample application for testing menu integration in Unity. Enjoy!"));
    mainFrame.getContentPane().add(panel);     
    mainFrame.addWindowListener ( new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
    });
 // set up the menu bar, by adding menus, etc.
  JMenuBar menuBar = new JMenuBar();
  JMenu file = new JMenu("File");
  file.add(new JMenuItem("Open"));
  file.add(new JMenuItem("Save"));
  file.add(new JMenuItem("Close"));
  JMenu edit = new JMenu("Edit");
  edit.add(new JMenuItem("Copy"));
  edit.add(new JMenuItem("Cut"));
  edit.add(new JMenuItem("Paste"));
  JMenu help = new JMenu("Help");
  help.add(new JMenuItem("Help topics"));
  help.add(new JMenuItem("About"));
  menuBar.add(file);
  menuBar.add(edit);
  menuBar.add(help);
  menuBar.setVisible(true);
  mainFrame.setJMenuBar(menuBar);
  mainFrame.pack();
  mainFrame.setVisible(true);
   // Java Ayatana Call
  if (AyatanaDesktop.isSupported()) { 
      ApplicationMenu.tryInstall(mainFrame);
  }
}
public static void main(String[] args) {
    new MyAppWithUnityMenu();
}
}

最重要的是你的应用程序仍然是跨平台的。我已经在 Ubuntu 12.04 LTS 和 Windows XP 中测试了上述示例。

答案3

您可以使用 ppa:ppa:danjaredg/贾亚塔纳

http://www.webupd8.org/2014/02/get-unity-global-menu-hud-support-for.html

答案4

这不是对你的解决方案,但仅供参考:我提交了 Ubuntu错误 #984916跟踪 Swing 菜单未(半)自动集成到全局菜单中的事实。

相关内容