जवाबों:
Java-gnome (एक java gtk आवरण) नामक एक पुस्तकालय है जो आपके ऐप्स को सभी मूल ऐप्स की तरह व्यवहार करने की अनुमति देता है। यह उन्हें सभी महिमा प्रदान करता है: देशी विजेट, वैश्विक मेनू, आदि।
पुस्तकालय ubuntu रिपॉजिटरी पर उपलब्ध है:
पुस्तकालय का लक्ष्य एक समृद्ध जावा + सूक्ति अनुभव विकसित करना है। खबरदार, कि अगर आप इस लाइब्रेरी का उपयोग करते हैं तो आपका ऐप जावा की मल्टीप्लेट रिकॉर्डर सुविधा खो देगा (क्योंकि यह जावा-ग्नोम से बंधा होगा)।
यहाँ एक नमूना ऐप है (जो जावा-ग्नोम के साथ आता है) मेनू एकीकरण प्रदर्शित करता है:
आयतन की कोशिश करो। आप यहाँ निर्देश पा सकते हैं: http://hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-applications-with-unity-global-menu-in-ubuntu-12-04/
आपको बस इतना करना है कि जावा अयाताना लाइब्रेरी को आयात करना है और इसे अपने मुख्य 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();
}
}
और सबसे महत्वपूर्ण बात यह है कि आपका एप्लिकेशन अभी भी क्रॉस-प्लेटफ़ॉर्म है। मैंने उबंटू 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 में। तो यह करने का इच्छित तरीका स्विंग को पैच करना होगा, यदि आप जिस जीयूआई टूलकिट का उपयोग कर रहे हैं। हालांकि, सभी एकता घटक DBus का उपयोग करके संवाद करते हैं, इसलिए यदि आप वास्तव में चाहते थे, तो आप स्वयं DBus API को लागू करके ऐसा कर सकते थे। यदि आप ऐसा करना चाहते हैं, तो आप libdbusmenu पर एक नज़र डालना चाहते हैं और देख सकते हैं कि यह कैसे काम करता है।
आपके लिए ठीक नहीं है, लेकिन FYI करें: मैंने इस तथ्य को ट्रैक करने के लिए Ubuntu बग # 984916 दर्ज किया कि स्विंग मेन्यू स्वचालित रूप से वैश्विक मेनू में एकीकृत नहीं है।