Java 앱을 unity global 메뉴와 호환되게하려면 어떻게합니까?


답변:


8

앱이 모든 기본 앱처럼 작동하도록하는 java-gnome (java gtk 래퍼) 이라는 라이브러리 가 있습니다. 기본 위젯, 글로벌 메뉴 등 모든 영광을 제공합니다.

라이브러리는 우분투 리포지토리에서 사용할 수 있습니다.

라이브러리의 목표는 풍부한 Java + Gnome 경험을 개발하는 것입니다. 이 라이브러리를 사용하면 앱이 Java의 멀티 플랫폼 기능을 잃게됩니다 (java-gnome에 연결되므로).

다음은 메뉴 통합을 표시하는 샘플 앱 (java-gnome과 함께 제공됨)입니다.

앱 예


libjava-gnome이 libdbusmenu를 전혀 지원하는지 확인 했습니까? 결국 유니티는 그놈이 아닙니다. 또한 dbus 서비스를 상당히 급진적으로 사용하기 위해 다른 GUI 툴킷으로 전환한다고 생각합니다.
Jo-Erlend Schinstad

예, 확인했습니다 :).
Marcos Roriz Junior

2

Ayatana를 사용해보십시오. 여기에서 지침을 찾을 수 있습니다 : 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를보고 작동 방식을 확인하십시오.


실제 답변이 아니며 dbus를 구현하도록 op에 요청한 경우 -1입니다.
Marcos Roriz Junior

1
실제 답변이 아닙니까? 어떻게 그런 말을 할 수가있어? 나는 무엇이 요청되었는지 정확하게 대답했다. OP는 Swing 애플리케이션을 GTK로 포팅하는 방법을 묻지 않았습니다.
Jo-Erlend Schinstad

0

당신을위한 해결책은 아니지만 참고로 : 스윙 메뉴가 (반) 자동으로 글로벌 메뉴에 통합되지 않았다는 사실을 추적하기 위해 우분투 버그 # 984916 을 제출했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.