मैं अपने जावा ऐप को एकता वैश्विक मेनू के साथ कैसे संगत करूं?


11

मैं जावा में विकसित करना पसंद करता हूं, लेकिन वैश्विक मेनू के साथ संगतता भी चाहता हूं? क्या उधर रास्ता है? कृपया मदद कीजिए।

जवाबों:


8

Java-gnome (एक java gtk आवरण) नामक एक पुस्तकालय है जो आपके ऐप्स को सभी मूल ऐप्स की तरह व्यवहार करने की अनुमति देता है। यह उन्हें सभी महिमा प्रदान करता है: देशी विजेट, वैश्विक मेनू, आदि।

पुस्तकालय ubuntu रिपॉजिटरी पर उपलब्ध है:

पुस्तकालय का लक्ष्य एक समृद्ध जावा + सूक्ति अनुभव विकसित करना है। खबरदार, कि अगर आप इस लाइब्रेरी का उपयोग करते हैं तो आपका ऐप जावा की मल्टीप्लेट रिकॉर्डर सुविधा खो देगा (क्योंकि यह जावा-ग्नोम से बंधा होगा)।

यहाँ एक नमूना ऐप है (जो जावा-ग्नोम के साथ आता है) मेनू एकीकरण प्रदर्शित करता है:

उदाहरण ऐप


क्या आपने पुष्टि की है कि libjava-gnome libdbusmenu का समर्थन करता है? एकता सब के बाद सूक्ति नहीं है। इसके अलावा, मुझे लगता है कि एक और GUI टूलकिट में स्विच करना ताकि एक dbus सेवा का उपयोग काफी कट्टरपंथी हो सके।
जो-एर्लेंड शिनस्टैड

हां, मैंने पुष्टि की है :)।
मार्कोस रोरीज़ जूनियर

2

आयतन की कोशिश करो। आप यहाँ निर्देश पा सकते हैं: 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 दोनों में उपरोक्त उदाहरण का परीक्षण किया है।



0

यह सामान्य रूप से टूलकिट स्तर पर किया जाता है, उदाहरण के लिए GTK या Qt में। तो यह करने का इच्छित तरीका स्विंग को पैच करना होगा, यदि आप जिस जीयूआई टूलकिट का उपयोग कर रहे हैं। हालांकि, सभी एकता घटक DBus का उपयोग करके संवाद करते हैं, इसलिए यदि आप वास्तव में चाहते थे, तो आप स्वयं DBus API को लागू करके ऐसा कर सकते थे। यदि आप ऐसा करना चाहते हैं, तो आप libdbusmenu पर एक नज़र डालना चाहते हैं और देख सकते हैं कि यह कैसे काम करता है।


-1 वास्तविक उत्तर के लिए नहीं और डब सामान को लागू करने के लिए ऑप से पूछने के लिए।
मार्कोस रोरिज जूनियर

1
असली जवाब नहीं? आप ऐसा कैसे कह सकते हैं? मैंने ठीक वही उत्तर दिया जो पूछा गया था। ओपी ने यह नहीं पूछा कि जीटीके के लिए एक स्विंग एप्लीकेशन को कैसे पोर्ट किया जाए।
जो-एर्लेंड शिनस्टैड

0

आपके लिए ठीक नहीं है, लेकिन FYI करें: मैंने इस तथ्य को ट्रैक करने के लिए Ubuntu बग # 984916 दर्ज किया कि स्विंग मेन्यू स्वचालित रूप से वैश्विक मेनू में एकीकृत नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.