Javaで開発したいのですが、グローバルメニューとの互換性も必要ですか?方法はありますか?助けてください。
Java-gnome (Java gtkラッパー)と呼ばれるライブラリがあり、アプリがすべてのネイティブアプリのように動作できるようにします。ネイティブウィジェット、グローバルメニューなど、すべての栄光を提供します。
ライブラリは、ubuntuリポジトリで利用できます。
このライブラリの目標は、豊富なJava + Gnomeエクスペリエンスを開発することです。このライブラリを使用すると、アプリはJavaのマルチプラットフォーム機能を失うことに注意してください(Java-gnomeに関連付けられるため)。
以下は、メニュー統合を表示するサンプルアプリ(Java-gnomeに付属)です。
アヤタナをお試しください。ここに手順があります: http://hanynowsky.wordpress.com/2012/05/12/integration-of-Java-swing-applications-with-unity-global-menu-in-ubuntu-12- 04 /
必要なことは、Java Ayatana Libraryをインポートし、メインの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の両方で上記の例をテストしました。
PPAを使用できます:ppa:danjaredg/jayatana
http://www.webupd8.org/2014/02/get-unity-global-menu-hud-support-for.html
これは通常、ツールキットレベル、たとえばGTKやQtで行われます。そのため、使用するGUIツールキットである場合は、Swingにパッチを適用することが意図されています。ただし、すべてのUnityコンポーネントはDBusを使用して通信するため、本当に必要な場合は、DBus APIを自分で実装することで自分で行うことができます。これを行うには、libdbusmenuを見て、どのように機能するかを確認してください。
修正ではありませんが、参考までに、Swingメニューが(半)自動でグローバルメニューに統合されていないことを追跡するために、Ubuntu bug#984916 を提出しました。