Java uygulamamı unity global menüsü ile nasıl uyumlu hale getiririm?


Yanıtlar:


8

Uygulamalarınızın tüm yerel uygulamalar gibi davranmasını sağlayan java-gnome (bir java gtk sarıcı) adlı bir kütüphane var . Onlara tüm ihtişamı sağlar: yerel widget'lar, küresel menü, vb.

Kütüphane ubuntu depolarında bulunur:

Kütüphanenin amacı zengin bir Java + Gnome deneyimi geliştirmektir. Bu kütüphaneyi kullanırsanız uygulamanızın Java'nın çoklu platform özelliğini kaybedeceğini unutmayın (çünkü java-gnome'a ​​bağlı olacaktır).

Menü entegrasyonunu gösteren örnek bir uygulama (java-gnome ile birlikte gelir):

Örnek Uygulama


Libjava-gnome'un libdbusmenu'yu desteklediğini onayladınız mı? Ne de olsa birlik Gnome değil. Ayrıca, sadece oldukça radikal olmak için bir dbus hizmetini kullanmak için başka bir GUI araç setine geçmeyi düşünüyorum.
Jo-Erlend Schinstad

Evet, onayladım :).
Marcos Roriz Junior

2

Ayatana'yı deneyin. Talimatları burada bulabilirsiniz: http://hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-applications-with-unity-global-menu-in-ubuntu-12-04/

Tek yapmanız gereken Java Ayatana Kütüphanesini içe aktarmak ve ana JFrame sınıfınızda çağırmaktır. Bu aslında kodunuza aşağıdaki birkaç satırın eklenmesini (Ayatana sınıflarını içe aktarmanın yanı sıra) ima eder:

if (AyatanaDesktop.isSupported())
      ApplicationMenu.tryInstall(mainFrame);

İşte bir örnek:

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();
}
}

Ve en önemli şey, uygulamanızın hala çapraz platform olmasıdır. Yukarıdaki örneği hem Ubuntu 12.04 LTS hem de Windows XP'de test ettim.



0

Bu normalde araç seti düzeyinde yapılır, örneğin GTK veya Qt. Yani bunu yapmanın amaçlanan yolu, eğer kullandığınız GUI araç takımı ise Swing'i düzeltmek olacaktır. Bununla birlikte, tüm Unity bileşenleri DBus kullanarak iletişim kurar, bu yüzden gerçekten isterseniz, DBus API'sını kendiniz uygulayarak kendiniz yapabilirsiniz. Bunu yapmak istiyorsanız, libdbusmenu'ya bir göz atmak ve nasıl çalıştığını görmek isteyebilirsiniz.


-1 değil gerçek bir cevap ve op dbus şeyler uygulamak istemek için.
Marcos Roriz Junior

1
Gerçek bir cevap değil mi? Bunu nasıl söylersin? Ne sorulduğunu tam olarak cevapladım. OP, Swing uygulamasının GTK'ya nasıl taşınacağını sormadı.
Jo-Erlend Schinstad

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.