Bagaimana cara membuat aplikasi java saya kompatibel dengan menu global unity?

Jawaban:

8

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:

Contoh Aplikasi

Marcos Roriz Junior
sumber
Sudahkah Anda mengonfirmasi bahwa libjava-gnome mendukung libdbusmenu? Bagaimanapun, persatuan bukanlah Gnome. Juga, saya pikir beralih ke toolkit GUI lain hanya untuk menggunakan layanan dbus menjadi cukup radikal.
Jo-Erlend Schinstad
Ya, saya sudah mengkonfirmasi :).
Marcos Roriz Junior
2

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.

Diok
sumber
0

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.

Jo-Erlend Schinstad
sumber
-1 untuk bukan jawaban nyata dan untuk meminta op untuk mengimplementasikan hal-hal dbus.
Marcos Roriz Junior
1
Bukan jawaban nyata? Bagaimana Anda bisa mengatakan itu? Saya menjawab dengan tepat apa yang diminta. OP tidak bertanya bagaimana cara mem-porting aplikasi Swing ke GTK.
Jo-Erlend Schinstad
0

Bukan perbaikan untuk Anda, tetapi FYI: Saya mengajukan bug Ubuntu # 984916 untuk melacak fakta bahwa menu Swing tidak (semi-) secara otomatis terintegrasi ke dalam menu global.

Jesse Glick
sumber