web-dev-qa-db-fra.com

Comment rendre mon application Java compatible avec le menu global de l'unité?

J'aime développer en Java mais je veux aussi une compatibilité avec le menu global? Y a-t-il un moyen? S'il vous plaît aider.

11
Ayush

Il existe une bibliothèque appelée Java-gnome (un wrapper Java gtk) qui permet à vos applications de se comporter comme toutes les applications natives. Il leur fournit toute la gloire: widgets natifs, menu global, etc.

La bibliothèque est disponible sur les dépôts d'ubuntu:

Le but de la bibliothèque est de développer une riche expérience Java + Gnome. Attention, si vous utilisez cette bibliothèque, votre application perdra la fonctionnalité multiplateforme de Java (car elle sera liée à Java-gnome).

Voici un exemple d'application (fourni avec Java-gnome) affichant l'intégration du menu:

Example App

8
Marcos Roriz Junior

Essayez Ayatana. Vous pouvez trouver des instructions ici: http://hanynowsky.wordpress.com/2012/05/12/integration-of-Java-swing-applications-with-unity-global-menu-in-ubuntu-12- 04 /

Tout ce que vous avez à faire est d'importer la bibliothèque Java Ayatana et de l'appeler dans votre classe principale JFrame. Cela implique en fait l'ajout des quelques lignes suivantes dans votre code (ainsi que l'importation de classes Ayatana):

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

Voici un exemple:

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

Et le plus important est que votre application soit toujours multiplateforme. J'ai testé l'exemple ci-dessus sous Ubuntu 12.04 LTS et Windows XP.

2
Diok

Vous pouvez utiliser un ppa: ppa: danjaredg/jayatana

http://www.webupd8.org/2014/02/get-unity-global-menu-hud-support-for.html

1
danjaredg

Cela se fait normalement au niveau de la boîte à outils, par exemple dans GTK ou Qt. Donc, la manière de le faire serait de patcher Swing, si c'est le toolkit GUI que vous utilisez. Cependant, tous les composants Unity communiquent à l'aide de DBus. Par conséquent, si vous le souhaitez vraiment, vous pouvez le faire vous-même en implémentant l'API DBus vous-même. Si vous voulez faire cela, vous pouvez jeter un oeil à libdbusmenu et voir comment ça marche.

0
Jo-Erlend Schinstad

Pas de solution pour vous, mais pour votre information: j'ai classé Ubuntu bogue n ° 984916 pour suivre le fait que les menus Swing ne sont pas (semi-) intégrés automatiquement dans le menu global.

0
Jesse Glick