Java Swing geliştirmenin en iyi uygulamaları nelerdir?


17

Bu soru için ön araştırmamı yaparken , İnternette Java Swing en iyi uygulamaları hakkında çok iyi organize edilmiş bir bilgi olmadığını buldum. Bu yüzden Stack Exchange'e bir Büyük Liste oluştururken bir şans vereceğim.

Java Swing geliştirmenin en iyi uygulamaları nelerdir? Sizin için neyin işe yaradığını buldunuz ve neden?


2
Swing ile okulda oynadım ve bu hoş bir deneyim değildi. Her şey şişmiş ve gereksiz yere karmaşık görünüyordu. En iyi uygulama başka bir şey kullanmak
Robert Harvey

1
@RobertHarvey "okulda oynamak" üretim yazılımı sunmaktan çok uzaktır. Swing'in gerekli olan her şeyi makul ve mantıklı bir şekilde yapabileceğini buldum.

Şöyle söyleyin: Sadece bir okul projesinde bu kadar zor olsaydı, gerçek bir projede hayal bile edilemeyecek kadar zor olurdu.
Robert Harvey

1
@RobertHarvey gücü bir fiyat ile geliyor ...

Bir şey daha var. Salıncak bileşenleri serileştirilebilir ve birçok ataya sahiptir. Bu yüzden çoğu durumda miras almak için çok ağırdırlar. Özellikle sürülemeyen bir duruma sahipseniz, bazı sarma tekniklerini düşünmelisiniz. Bir bileşenden miras alırsanız, onu görünüm olarak kullanın (MVC veya benzer bir desende).
Dávid Horváth

Yanıtlar:


12

Sadece benim için işe yarayanlara cevap verebilirim. Diğer yorumcular, Java GUI'lerinin genel olarak oldukça doğal olmayan bir görünüm ve his olmayan 'tekin olmayan vadiye' düştüğüne dikkat çekti ve buna itiraz etmiyorum.

Action API'sini iyi kullanın. Kullanıcınızın gerçekleştireceği farklı eylemleri daha iyi kapsüllemenizi ve bunları kısayollara, hızlandırıcı tuşlara, düğmelere ve diğer giriş nesnelerine çok daha kolay bir şekilde bağlamanızı sağlar.

Uygun bir düzen yöneticisi kullanın. GridBagLayout son derece güçlü, ancak aşırı miktarda yorum olmadan sürdürülemez olduğunu söyleyecek kadar ileri giderdim. Bakım yaptığım daha eski bir GUI uygulaması üzerinden Sonar gibi statik kod analiz araçlarını çalıştırdığımda, GridBags düzenini doğru yapmak için her zaman büyük miktarda sihirli sayıya işaret ediyor. Piksel mükemmel hizalama belirtmek zorunda kalmadan GroupLayout ile bol başarı elde ettik.

JDialog'a ihtiyacınız olduğunu düşünüyorsanız ... muhtemelen gerekmiyor. İletişim kutuları kullanıcı deneyimi açısından korkunçtur - bu uygulama bunları her menü ve form için kullanmaya ve her zaman üstteki kuralları tuhaf yollarla uygulamaya karar verdi. Biz aslında menü üzerinde bir şey uyarmak gerek yoktu bu bakım kabusu döndü. İşaret, odaklanamayan ve dolayısıyla kabul edilemeyen iletişim kutularına tıklamaktan rahatsız oldu.

Uygun olduğunda kendi çoklu kullanımınızı yuvarlamak yerine SwingWorker kullanın. GUI'ye düzenli güncellemeler sağlarken SwingWorker'ı genişletmek ve bazı uzun süren görevler yapmak çok kolaydır. Bir istemci güncellemesi indirmeyi düşünün. Sizin için çalışan iş parçacığı zamanlamasını işleyecek ve indirme yüzdelerini tekrar görünüme yayınlayabilmenizi sağlayacak, böylece ProgressBar'ınızı veya neyiniz olduğunu güncelleyebilirsiniz.

Kuşkusuz sınırlı deneyimimde önerebileceğim tek şey bu.


2
JDialogdiyaloglar için kullandığınız sürece, gayet iyi.
Jonas

1
Onları kesinlikle mutlaka görülmesi ve üzerinde işlem yapılması gereken bilgiler için kullanıyorsanız iyi olduklarını kabul ediyorum. Ancak çoğu bilginin kullanıcı deneyimini bu kadar bozması gerekmez. Niteleyicimin arkasındaki nokta buydu.
Tom G

@Jonas Bence diyaloglar kötü bir şeydir (uygulansın JDialogya da uygulanmalarına bakılmaksızın ).
Tom Hawtin - taktik

1
Kaplin koklamak tarafında biraz, ama kendi iş parçacığı kodu yazmak daha iyidir IMO. Ben ince iplik hataları daha yetersiz kodu ile başa çıkmak istiyorum.
Tom G

3
Sen MigLayout bakmak isteyebilirsiniz - miglayout.com

4

İlk şeylerden birinin üzerinde doğrudan çalışmak olmadığını söyleyebilirim. Swing'deki (IMHO) düzen sistemi korkunç ve herhangi bir önemli uygulamayı yapmaya çalışmak bir kabus.

İki birçok alternatif düzen yöneticileri Kullandığım olduğunu MigLayout ve MultiSplitPane düzeni vardır. MigLayout daha genel bir amaçtır ve aklınıza gelebilecek her düzeni kolay ve akılcı bir şekilde yapar. MultiSplitPane daha spesifiktir; Çok karmaşık olmayan GUI'ler için basit düzenler yapmak için kullandım.

EDIT : Bu salıncak yerine geçmez . Swing'i kullanmak zorundaysanız, bu Layout yöneticilerini kullanmaya devam edebilirsiniz, çünkü yalnızca salıncakları yönetir, değiştirmezler.


Tabii ki daha iyi bir alternatif sadece Swing'i kullanmamaktır. Swing, çalışmak için korkunç olduğu için ağır bir şekilde eleştiriliyor, yerli ve yavaş görünmüyor . Salıncaktan Qt, SWT ve bence GTK gibi bir şey yapmayı öğrenen birçok alternatif var. Bunlar Swing'in baş ağrılarına mükemmel uzun vadeli çözümler

DÜZENLEME : @Lord Torgamus'un dediği gibi, Swing'i kullanmak zorunda kalırsanız bunlar gerçekten mevcut değildir. Bunları projenizi oluştururken bunu çözmek için elinden gelenin en iyisini yapacaksanız, eski uygulamaları seçerken veya seçerken 3/4 değil.

Ayrıca, alternatif GUI'lerin çoğunun işletim sistemine benzemek, daha sonra Swing'e veya başka bir Saf Java GUI'ye geri dönmek için yerel kütüphaneleri kullandığını da belirtmek isterim.


4
Fikrinizi takdir ediyorum, ancak "Swing'i kullanma", bu soruyla sonuçlanan insanlar için yararlı değildir, çünkü Swing'i bir nedenden dolayı kullanmaya zorlanmaktadırlar.
Pops

@ Lord Bu nedenle QT ve SWT'yi önermeden önce alternatif düzen yöneticileri önerdim. Hangi yolu kullanabilirsiniz.
TheLQ

"Swing'deki düzen sistemi (IMHO) korkunç ve herhangi bir önemli uygulamayı yapmaya çalışmak bir kabus." Layout yöneticileri Swing'den değil AWT'den geliyor. Verilen, BoxLayout ve GroupLayout gibi Swing'e özgü birkaç tane var. Bununla birlikte, mizanpaj yöneticileri tamamen isteğe bağlıdır ... bunun yerine .NET WinForms'da yaptığınız gibi her bileşen için koordinatları belirtebilirsiniz (.NET'in sizin için yapacak güzel bir GUI'si hariç).
Powerlord

3
MigLayout'a bir göz atın - miglayout.com

1
@TheLQ Tamam Swing'in dosya yöneticisini kabul ediyorum, bunun gerçekten aptalca olduğunu (Mac OS X'te de). Her neyse, bunu düzeltmek için AWT'nin dosya yöneticisini kullanıyorum. Uygulamanın geri kalanı Swing kullanılarak yapılmış olsa bile iyi çalışır.
stommestack
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.