2009-10-27 31 views
8

alt textCách triển khai thanh tiêu đề giống như Google Chrome cho ứng dụng Java SWT

Tôi đã kế thừa phát triển ứng dụng Java/SWT chỉ chạy trên Windows. Một trong những yêu cầu tính năng mà tôi cần phải phạm vi là thanh tiêu đề của Google-chrome thay cho thanh tiêu đề của cửa sổ SWT. Các tab của ứng dụng xuất hiện ở cùng cấp với các nút điều khiển cửa sổ.

sự hiểu biết của tôi là tôi sẽ cần phải:

  • viết Windows tùng khả năng render giao diện tùy chỉnh và quản lý các tab như trái ngược với các menu.
  • hiển thị tiện ích Windows dưới dạng dll để sử dụng trong Java qua JNI
  • viết một tiện ích SWT tùy chỉnh để bọc nó và hiển thị giao diện quản lý tab.

Tôi có nhiều kinh nghiệm về lập trình Java, lập trình GUI với Swing/AWT và lập trình C# không GUI. Windows GUI lập trình và SWT là mới với tôi vì vậy tôi không chắc chắn nơi để bắt đầu. Tốt nhất tôi đã tìm thấy cho đến nay là một bài báo năm 2001 trên writing your own SWT widget.

Không xác định lớn nhất của tôi là cách tốt nhất để triển khai cửa sổ ứng dụng Windows tùy chỉnh.

+0

Con đường tôi hiểu nó là nó sẽ gần như không thể làm điều này với SWT như SWT là khá nhiều công cụ GUI nền tảng-agnostic nhất, và do đó các tiêu chuẩn nhất. GUI như Chrome yêu cầu giao diện trực tiếp hơn nhiều với hệ điều hành vì nó không sử dụng các phần tử OS GUI chuẩn. Bạn sẽ cần phải viết trình quản lý tab của riêng bạn (và có thể là cửa sổ). – HalfBrian

+1

@ HalfBrian: Trên thực tế Swing là nền tảng bất khả tri nhất vì nó hiển thị tất cả các thành phần của chính nó, trong khi SWT sử dụng các thành phần hệ điều hành. Đương nhiên điều đó không làm cho phần còn lại của bình luận của bạn bất kỳ sự thật ít hơn :) –

Trả lời

8

Bạn có thể tạo phiên bản Shell không có cờ TITLE và sau đó hiển thị các tab tương tự như Google-chrome. Bằng cách này, bạn thậm chí có thể tạo non-rectangular windows

+0

Cảm ơn Eugene, điều này đã cho tôi di chuyển đúng hướng. – MartyC

2

khi xử lý những thứ chưa có trong lớp SWN của JNI, bạn nên luôn nhớ rằng bạn có thể nhanh chóng thử nghiệm mọi thứ với JNA. Khi nguyên mẫu JNA, sau đó bạn có thể mở rộng giao diện nguyên gốc của SWT hoặc tạo lớp JNI riêng của bạn (Đây là một cách tiếp cận hiệu quả đối với tôi một số lần khi xử lý các tiện ích SWT Carbon/Cocoa)

+0

Tôi chưa từng thấy dự án đó trước đây, cảm ơn. – MartyC

0

Tôi khuyên bạn nên tạo một vỏ mà không có trang trí giống như vậy:

new Shell (display, SWT.NO_TRIM); 

Điều này sẽ tạo ra vỏ không có thanh tiêu đề. Sau đó bạn có thể tạo các nút đóng/thu nhỏ/tối đa của riêng bạn.

Dưới đây là ví dụ tạo ra thanh tiến trình đơn độc mà không có thanh tác vụ tiêu đề.

enter image description here

import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.FormAttachment; 
import org.eclipse.swt.layout.FormData; 
import org.eclipse.swt.layout.FormLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.ProgressBar; 
import org.eclipse.swt.widgets.Shell; 

public class ProgressBarGui { 

    Display display; 
    Shell shell; 

    public static void main (String [] args) { 
     final Display display = new Display(); 
     final Shell shell = new Shell (display, SWT.NO_TRIM); 


     //Something to put into shell. 
     shell.setLayout (new FormLayout()); 

     ProgressBar proBar = new ProgressBar (shell, SWT.SMOOTH); 
     proBar.setSelection (50); 
     FormData progBarData = new FormData (100, 20); 
     progBarData.top = new FormAttachment (0); 
     progBarData.left = new FormAttachment (0); 
     proBar.setLayoutData (progBarData); 

     //recompute shell's size and position to fit widget. 
     shell.pack(); 

     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     // region.dispose(); 
     display.dispose(); 
    } 

} 
Các vấn đề liên quan