2010-07-01 41 views
5

Tôi đang tìm một số hướng dẫn về các phương pháp hay nhất cho một ứng dụng sử dụng Java Swing để được cấu trúc. Tôi là một anh chàng webapp bình thường và cố gắng theo MVC. MVC có điển hình cho các ứng dụng Swing không? Nếu vậy, làm thế nào?Cấu trúc chương trình Java Swing

Trả lời

2

Bạn có thể tìm thấy điều này rất đơn giản 0.123.hữu ích.

3

Làm theo MVC là một ý tưởng rất hay. Theo như tôi biết không có khung Java Swing chính thức làm điều đó, tất cả chúng đều tập trung vào khía cạnh "Xem" của vấn đề.

Về cơ cấu ứng dụng và MVC - khung tốt nhất mà tôi biết là Griffon. Nó không phải là Java - nó là Groovy, nhưng đó là những gì làm cho nó hấp dẫn hơn và khá dễ học. Griffon cho một ứng dụng Swing giống như Grails cho một ứng dụng web.

Check it out tại http://griffon.codehaus.org/

+1

Thực ra những ngày này Griffon là Java nhiều hơn Groovy (ít nhất là trong việc thực hiện của nó). Nó cho phép bạn viết một ứng dụng với Groovy hoặc Java hoặc thậm chí cả hai cùng một lúc. – aalmiray

+0

Tôi thực sự đang chờ hỗ trợ đầy đủ (tạo mã quá) của Scala. Mà có thể thực sự tốt đẹp. Tôi nghĩ rằng bạn đang làm việc trên một cái gì đó như thế :) –

+0

Nó đã có. Cài đặt nguyên mẫu scala và bạn đang kinh doanh. 'Griffon cài đặt-nguyên mẫu http: // svn.codehaus.org/Griffon/nguyên mẫu/scala/trunk/scala/scala-Griffon-archetype.zip' ' Griffon tạo ứng dụng mẫu -archetype = scala' Hãy coi chừng chế độ applet chưa được hỗ trợ. Bạn sẽ tìm thấy bạn có thể viết bất kỳ tạo phẩm griffon (Model, View, Controller, Service) với Scala. Bạn thậm chí có thể sử dụng scala-swing trong Views. – aalmiray

0

Swing có một thiết lập tương đối tốt cho một kiến ​​trúc MVC, nhưng thực sự nó kết hợp quan điểm và điều khiển. Các thành phần trong Swing có thể có các trình lắng nghe gắn liền với chúng, đó là khía cạnh bộ điều khiển, và sau đó từ bên trong các bộ nghe này (nằm trong các thành phần), bạn có thể sửa đổi khung nhìn và mô hình cho phù hợp. Vì vậy, để trả lời câu hỏi của bạn, có, Swing sẽ giúp với một cách tiếp cận MVC cho một ứng dụng Java.

Trong Swing, bạn vẫn có hai phần riêng biệt cho VC: thành phần và người nghe. Lý do tôi nói chúng được kết hợp là bởi vì mỗi thành phần có thể có người nghe tương ứng riêng của nó. Những người nghe thường làm các thao tác, và là khía cạnh điều khiển. Các thành phần được thiết kế để không chỉ được xem trên màn hình, mà còn truyền thông tin cho những người nghe này. Các nút bấm, nét chính, thay đổi tiêu điểm, đóng cửa sổ, vv đều được báo cáo cho người nghe của thành phần tương ứng theo thành phần. Dưới đây là một đoạn mã đơn giản cho một nút với một người nghe hành động, trong đó đăng ký một nút bấm.

ActionListener buttonListener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     // Controller code 
    } 
}; 

JButton button = new JButton("A Button"); 
button.addActionListener(buttonListener); 

Các ActionListener về cơ bản là bộ điều khiển, nhưng nó phụ thuộc vào button nhận đầu vào từ người dùng. Đây là nơi Swing muddles sự khác biệt giữa xem và điều khiển từ một quan điểm MVC tinh khiết, nhưng cùng lúc đó, sự khác biệt vẫn còn đó:

Listenersđiều khiển (trừ trực tiếp giải thích các đầu vào)
Componentsxem (nhưng giải thích đầu vào và vượt qua nó với bộ điều khiển)

Hy vọng rằng sẽ giúp :)

+0

Tôi không nghĩ người nghe là bộ điều khiển. Chúng đơn giản có thể được sử dụng trong một bộ điều khiển để đáp ứng các sự kiện thành phần. –

+0

Đó là ý của tôi. Về mặt MVC, họ không, nhưng họ có thể nghĩ theo cách đó. Bộ điều khiển lấy đầu vào và sửa đổi mô hình. Người nghe có thể không nhất thiết phải lấy đầu vào, nhưng họ chắc chắn có thể được sử dụng để thao tác mô hình và, như là với một số giải thích của MVC, sửa đổi xem. Tất cả phụ thuộc vào một phần trách nhiệm của bộ điều khiển mà bạn muốn đặt trọng lượng nhiều hơn. – peppertherj

0

Đã có sự JSR (296) trong đó mô tả một khuôn khổ cho việc xây dựng Swing GUI, nhưng có vẻ như nó bị lãng quên về, hãy kiểm tra các bài viết sau đây mặc dù:

http://java.dzone.com/news/jsr-296-end-jframe

tôi đã tìm ra sau khuôn khổ, ban đầu dựa trên nó, mà trông đầy hứa hẹn:

Sẽ quan tâm đến việc tìm hiểu cách chúng hoạt động trong thực tế. Hy vọng họ giúp đỡ.

+0

Cũng có điều này (nhưng có vẻ không hoạt động) - http://github.com/hamnis/SAFF – Jon

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