我喜欢用 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 菜单未(半)自动集成到全局菜单中的事实。