Làm cách nào để làm cho ứng dụng java của tôi tương thích với menu unity toàn cầu?


Câu trả lời:


8

Có một thư viện gọi là java-gnome (trình bao bọc java gtk) cho phép các ứng dụng của bạn hoạt động giống như tất cả các ứng dụng gốc. Nó cung cấp tất cả vinh quang cho họ: widget gốc, menu toàn cầu, v.v.

Thư viện có sẵn trên kho ubfox:

Mục tiêu của thư viện là phát triển trải nghiệm Java + Gnome phong phú. Coi chừng, nếu bạn sử dụng thư viện này, ứng dụng của bạn sẽ mất tính năng đa nền tảng của Java (vì nó sẽ được gắn với java-gnome).

Đây là một ứng dụng mẫu (đi kèm với java-gnome) hiển thị tích hợp menu:

Ứng dụng ví dụ


Bạn đã xác nhận rằng libjava-gnome hỗ trợ libdbusmenu chưa? Unity không phải là Gnome. Ngoài ra, tôi nghĩ rằng việc chuyển sang một bộ công cụ GUI khác chỉ để sử dụng dịch vụ dbus là khá triệt để.
Jo-Erlend Schinstad

Vâng, tôi đã xác nhận :).
Marcos Roriz Junior

2

Hãy thử Ayatana. Bạn có thể tìm thấy hướng dẫn tại đây: http://hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-appluggest-with-unity-global-menu-in-ubfox-12-04/

Tất cả những gì bạn phải làm là nhập Thư viện Java Ayatana và gọi nó trong lớp JFrame chính của bạn. Điều này thực sự ngụ ý việc thêm một vài dòng sau vào mã của bạn (cũng như nhập các lớp Ayatana):

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

Đây là một ví dụ:

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

Và điều quan trọng nhất là ứng dụng của bạn vẫn đa nền tảng. Tôi đã thử nghiệm ví dụ trên trong cả Ubuntu 12.04 LTS và Windows XP.



0

Điều đó thường được thực hiện ở cấp bộ công cụ, ví dụ như trong GTK hoặc Qt. Vì vậy, cách dự định để làm điều đó là vá lỗi Swing, nếu đó là bộ công cụ GUI bạn đang sử dụng. Tuy nhiên, tất cả các thành phần Unity giao tiếp bằng DBus, vì vậy nếu bạn thực sự muốn, bạn có thể tự làm điều đó bằng cách tự thực hiện API DBus. Nếu bạn muốn làm điều này, bạn có thể muốn xem libdbusmenu và xem nó hoạt động như thế nào.


-1 không phải là một câu trả lời thực sự và yêu cầu op thực hiện công cụ dbus.
Marcos Roriz Junior

1
Không phải là một câu trả lời thực sự? Sao bạn lại có thể nói điều đó? Tôi trả lời chính xác những gì được hỏi. OP không hỏi làm thế nào để chuyển ứng dụng Swing sang GTK.
Jo-Erlend Schinstad

0

Không phải là một sửa chữa cho bạn, nhưng FYI: Tôi đã gửi lỗi Ubuntu # 984916 để theo dõi thực tế rằng các menu Xoay không được tích hợp (bán) tự động vào menu chung.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.