Відповіді:
Існує бібліотека під назвою 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 та викликати її у вашому головному класі JFrame. Це фактично означає додавання наступних кількох рядків у ваш код (а також імпорт класів Айатани):
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. Таким чином, призначений спосіб зробити це було б виправити Swing, якщо це інструментарій GUI, який ви використовуєте. Однак всі компоненти Unity спілкуються за допомогою DBus, тому, якщо ви дійсно цього хотіли, ви можете зробити це самостійно, реалізуючи API DBus самостійно. Якщо ви хочете це зробити, ви можете ознайомитися з libdbusmenu і подивитися, як це працює.