Jawaban:
Ada perpustakaan yang disebut java-gnome (pembungkus java gtk) yang memungkinkan aplikasi Anda berperilaku seperti semua aplikasi asli. Ini memberikan semua kemuliaan bagi mereka: widget asli, menu global, dll.
Perpustakaan tersedia di repositori ubuntu:
Tujuan perpustakaan adalah untuk mengembangkan pengalaman Java + Gnome yang kaya. Hati-hati, jika Anda menggunakan pustaka ini, aplikasi Anda akan kehilangan fitur multiplatform Java (karena itu akan dikaitkan dengan java-gnome).
Berikut adalah contoh aplikasi (yang dilengkapi dengan java-gnome) yang menampilkan integrasi menu:
Coba Ayatana. Anda dapat menemukan petunjuk di sini: http://hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-applications-with-unity-global-menu-in-ubuntu-12-04/
Yang harus Anda lakukan adalah mengimpor Pustaka Ayatana Java dan menyebutnya di kelas JFrame utama Anda. Ini sebenarnya menyiratkan penambahan beberapa baris berikut dalam kode Anda (serta mengimpor kelas Ayatana):
if (AyatanaDesktop.isSupported())
ApplicationMenu.tryInstall(mainFrame);
Berikut ini sebuah contoh:
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();
}
}
Dan yang paling penting adalah aplikasi Anda masih cross-platform. Saya telah menguji contoh di atas di Ubuntu 12.04 LTS dan Windows XP.
Anda dapat menggunakan ppa: ppa: danjaredg / jayatana
http://www.webupd8.org/2014/02/get-unity-global-menu-hud-support-for.html
Itu biasanya dilakukan di tingkat toolkit, misalnya di GTK atau Qt. Jadi cara yang dimaksudkan untuk melakukannya adalah dengan menambal Swing, jika itu toolkit GUI yang Anda gunakan. Namun, semua komponen Unity berkomunikasi menggunakan DBus, jadi jika Anda benar-benar ingin, Anda bisa melakukannya sendiri dengan menerapkan API DBus sendiri. Jika Anda ingin melakukan ini, Anda mungkin ingin melihat libdbusmenu dan melihat cara kerjanya.