Tôi đang viết một ứng dụng có giao diện SWT hiện tại, nhưng muốn người dùng cuối có thể chọn giữa SWT và Swing. Tôi đã thử nghiệm với abstracting các chi tiết GUI trước khi ở các lớp khác nhau trong chương trình, nhưng chưa bao giờ thực sự hài lòng với kết quả. Có cách nào thỏa thuận hay tốt đẹp để làm điều này?Có cách nào tốt đẹp để trừu tượng GUI để SWT hoặc Swing có thể được sử dụng?
Trả lời
Rất tiếc, tôi không tin rằng API có bộ công cụ bất khả tri hoặc tương tự.
Vì vậy, có lẽ đáng để xem mẫu model-view-controller. Bạn cần phải trừu tượng hóa nhiều chức năng từ GUI vào bộ điều khiển sao cho các thành phần GUI mỏng và được dành riêng cho bộ công cụ cửa sổ cụ thể mà bạn đã chọn.
Điều này sẽ cho phép bạn đặt trong chế độ xem Swing thay cho chế độ xem GWT (hoặc ngược lại) với tối thiểu mã trùng lặp.
Cũng lưu ý rằng điều này làm cho việc thử nghiệm lô dễ dàng hơn, vì càng nhiều càng tốt đã được xếp vào bộ điều khiển hoặc kiểu máy.
Có cách nào hay nhất để tóm tắt mã GUI cụ thể không?
Câu trả lời, ngắn gọn là không.
Sự cố khi sử dụng bất kỳ thư viện GUI cụ thể nào là mỗi GUI đi kèm với một tập hợp các nguyên lý thiết kế cơ bản có ảnh hưởng đến việc sử dụng thư viện. Trừ khi người ta đi qua hai thư viện như vậy mà đồng ý trong mọi đặc biệt về các nguyên lý thiết kế này, không có sự thay thế đơn giản nào của một GUI cho người khác.
Có một số thư viện cố gắng áp đặt thiết kế trên một loạt các GUI khác nhau bên dưới mỗi thiết kế của riêng chúng, nhưng các thư viện này yêu cầu số lượng lập trình dữ dội. Đồng thời, nỗ lực ép buộc một tập hợp các mô hình thiết kế thành một mô hình khác thường không hoàn toàn thành công.
Ví dụ về các thư viện này là QT, wxWidgets và, tất nhiên, AWT cơ bản của Java.
Cuối cùng, bạn phải chấp nhận rằng bạn sẽ chọn một thư viện và bị kẹt với nó.
Nếu mục tiêu duy nhất của bạn là cho phép người dùng chọn giữa SWT hoặc Swing vẽ giao diện người dùng của họ thì SWTSwing sẽ là một tùy chọn. Bạn có thể mã trong SWT và chọn jar thực hiện SWT trong khi khởi động và điều chỉnh đường dẫn lớp của bạn cho phù hợp.
SWTSwing là triển khai API SWT sử dụng Swing. Nó thực hiện tương tự như mọi bản thực thi SWT nguyên gốc đều có: nó cung cấp cầu nối cho API GUI cơ bản.
Tại sao tôi viết "đã có"? Thật không may dự án dường như đã chết, bị mắc kẹt trong một thực hiện chưa hoàn thành của SWT-3.2, mặc dù rất nhiều công việc dường như được thực hiện như bạn có thể thấy trong bản demo webstart. Dự án chị em EoS (Eclipse on Swing) thậm chí còn có một nguyên mẫu chạy. Vì vậy, tôi không thể khuyên bạn nên sử dụng nó, mặc dù tôi thích ý tưởng đó.
Có, sử dụng SwingWT, việc triển khai Swing bằng cách sử dụng SWT làm phụ trợ.
Nhiều người thích API Swing cấp cao hơn, nhưng SWT sử dụng các tiện ích gốc. Thư viện này dường như cung cấp cho bạn cả hai.Nó cũng cho phép các ứng dụng Swing chạy chưa sửa đổi bằng cách sử dụng một phụ trợ SWT (vì chương trình của bạn đã được viết bằng cách sử dụng SWT không giúp bạn, nhưng nó sẽ là những người khác). Theo mô tả, việc triển khai hoạt động bằng cách sử dụng trình nạp lớp tùy chỉnh thay thế các cuộc gọi Swing bằng các cuộc gọi đến SwingWT. Có thể cho phép người dùng chọn có thực hiện việc này hay không.
Tác giả dường như không chủ động phát triển nó, nhưng anh ấy vẫn đang xem xét/áp dụng các bản vá nhận được từ những người khác (gần đây nhất, vào đầu năm 2012).
Tôi biết dự án này và tôi rất buồn vì nó đã chết: ( – ZoFreX