Java Swing uygulamasında pencere yönetimi için tasarım deseni


9

İlk küçük Java Swing uygulamamı oluşturmaya başladım. Program açıldığında, etiketli ve çift düğmeli tek ve basit bir pencere açar. Bu düğmelerden birini tıklatmak, hoş geldiniz ekranını silmeli ve tamamen farklı bir panelle değiştirmelidir.

Bu işlevselliği oluşturmanın en iyi yolunun ne olduğundan emin değilim. Bir yöntem benim JFramebir argüman olarak benim ... diğer her bileşene geçmek olabilir , ama bu bana acayip geliyor. Veya her paneli bir eylem dinleyicisi olarak ikiye katlıyoruz, ama bu da doğru görünmüyor.

Burada uygulamam gereken bir tasarım deseni var mı? "Ana ve tek pencerenin içeriğini değiştirmek" oldukça yaygın bir işlem olmalıdır. Desen için bir ad yeterli olacaktır; Google'ı oradan kendi başıma kullanabilirim. (Yine de daha uzun bir açıklamaya hayır demezdim.)


Bu, gerçek programlama teknikleri hakkında bir soru olduğundan, Yığın Taşması konusunda çok daha fazla yanıt alacaksınız.
Alex Feinman

Yanıtlar:


6

Swing uygulamaları oluştururken, bunu genellikle Arabulucu Desenine dayandırırım. Bu modelde, bir Mediator sınıfı (genellikle ana JFrame) farklı GUI parçalarını (genellikle JPanels, JMenus ...) işler ve aralarındaki iletişimle ilgilenir.

Örneğin, JPanel1'de bir olay meydana gelirse, JPanel1 aracıyı (JFrame) bilgilendirir. JFrame daha sonra JPanel2'yi değiştirerek harekete geçer.

FYI: tüm projelerim küçük-orta GUI uygulamalarıydı, bu yüzden bu modellerin iyi ölçeklendiğinden emin değilim. Ancak yeterli bir mimari tasarlayabiliyorsanız, Arabulucu deseni sağlam bir temel olabilir.


4

Ana yöntemin bir JDialog görüntülemesini sağlayabilirsiniz. İletişim kutusu kapatıldığında, ana JFrame oluşturulur ve görüntülenir.

JDialog size özel içerikler ve düğmeler içeren bir iletişim kutusu görüntüleyen ve tıklatılan düğmenin kodunu döndüren kullanımı kolay statik yöntemler sunar. Bu değeri test ederek, ana yönteminiz ana çerçeveyi veya çıkışı (veya başka bir şeyi) görüntülemeye karar verebilir. Lütfen Javadoc'u okuyun.

Bazı eski UI çerçevelerinden farklı olarak, bir Swing uygulaması belirli bir çerçeveye veya pencereye bağlı değildir. İstediğiniz kadar pencere oluşturabilirsiniz. Uygulama, tüm camlar atıldığında değil, tüm dişler bittiğinde sona erer. Bu genellikle System.exit (0) ile gerçekleştirilir.

Bu durum için özel bir tasarım deseni olup olmadığını bilmiyorum. Java Swing eğitimini öneririm.


1
-1. Bu bir tasarım modeli sorusudur. Bana verilen özellikleri değiştirmeyi ve "Belirli bir tasarım deseni olup olmadığını bilmiyorum" ile bitirmenizi tavsiye etmiyor.
Pops

2
Cevabı çok doğru. İlk olarak formların ve iletişim kutularının nasıl çalıştığını öğrenmek için bir tasarım deseni sorununuz yok.
Alex

2

Birçok UI çerçevesinin 'ana' veya 'etkin' pencere ile ilgili farklı kuralları vardır. Bu karmaşıklığı yönetmenin bir yolu, ana mesaj döngüsünü kontrol eden ana pencerenizin görünmez bir pencere (veya özellikle sinir bozucu çerçeveler için ekran dışı küçük, kromsuz 1 piksel bir) olmasını sağlamaktır. diğer tüm pencerelerin ve iletişim kutularının bu pencerenin alt öğesi olmasını sağlayın.

Bu yöntemin, özellikle küresel tuş tıklamalarıyla ve fare olaylarıyla uğraşırken, üst düzey kayıt ve istisna işlemede birçok avantajı vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.