JavaアプリをUnityグローバルメニューと互換性を持たせるにはどうすればよいですか?


回答:


8

アプリがすべてのネイティブアプリのように動作できるようにするjava-gnome(java gtk wrapper)と呼ばれるライブラリがあります。ネイティブウィジェット、グローバルメニューなど、すべての栄光を提供します。

ライブラリは、ubuntuリポジトリで利用できます。

ライブラリの目標は、豊富なJava + Gnomeエクスペリエンスを開発することです。このライブラリを使用すると、アプリはJavaのマルチプラットフォーム機能を失うことに注意してください(java-gnomeに関連付けられるため)。

次に、メニュー統合を表示するサンプルアプリ(java-gnomeに付属)を示します。

サンプルアプリ


libjava-gnomeがlibdbusmenuを完全にサポートしていることを確認しましたか?結局のところ、UnityはGnomeではありません。また、dbusサービスを使用するためだけに別のGUIツールキットに切り替えると、かなり過激になると思います。
ジョエルレンシンスタッド

はい、確認しました:)。
マルコスロリスジュニア

2

アヤタナをお試しください。ここで手順を見つけることができます:http : //hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-applications-with-unity-global-menu-in-ubuntu-12-04/

必要なことは、Java Ayatanaライブラリをインポートして、メインのJFrameクラスで呼び出すことだけです。これは実際には、コードに次の数行を追加することを意味します(Ayatanaクラスをインポートすることも同様です):

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

そして最も重要なことは、アプリケーションがまだクロスプラットフォームであることです。上記の例をUbuntu 12.04 LTSとWindows XPの両方でテストしました。



0

これは通常、ツールキットレベル、たとえばGTKやQtで行われます。そのため、使用するGUIツールキットである場合は、Swingにパッチを適用することが意図されています。ただし、すべてのUnityコンポーネントはDBusを使用して通信するため、本当に必要な場合は、DBus APIを自分で実装することで自分で行うことができます。これを行いたい場合は、libdbusmenuを見て、どのように機能するかを確認してください。


-1は実際の答えではなく、opにdbusのものを実装するように依頼したため
マルコスロリスジュニア

1
本当の答えではありませんか?どうやってそれを言えますか?質問に正確に答えました。OPは、SwingアプリケーションをGTKに移植する方法を尋ねませんでした。
ジョーエルレンドシンスタット

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.