Tworzymy programy okienowe w JAVA z Eclipse+visualswing4eclipse. Część 2
26.06.2012 00:05
To drugi (i ostatni) wpis z tej serii. Powód: dzięki jednemu z komentarzy dowiedziałem się o jeszcze lepszym sposobie na projektowanie UI w Eclipse bez konieczności płacenia twórcom wtyczki, a mianowicie WindowBuilder. Skupimy się w nim na wywoływaniu dodatkowych okien, np. powiadomień. Zaczynamy!
Główne okno programu
Robimy sobie taki projekt interfejsu jak poniżej:
Od razu sugeruje nam, że program nie będzie skomplikowany, bo nie jest istotą tego przykładu zrobienie „programu do wszystkiego”. Do tego podczas rozciągania/zwężania elementów mogą pojawiać się przerywane linie przy brzegach lub na środku, co zakotwicza widżet w układzie okna — element będzie na stałym miejscu niezależnie od rozmiaru okna. Może się również rozciągać, aby się przystosować do nowego rozmiaru okna.
Sam program ma robić napisy wspak, tak więc program ten nie będzie skomplikowany, chociaż zrobimy sobie model w postaci klasy Napis.
Mając już interfejs i model, utworzymy sobie do każdego z przycisków zdarzenie mouseClicked
Dla jButton0:
private void jButton0MouseMouseClicked(MouseEvent event) { String texcik= new Napis(jTextField0.getText()).getOdwrocony(); //odwrócony tekst bez klasycznego tworzenia obiektu jTextField1.setText(texcik); }
Dla jButton1:
jTextField0.setText(""); jTextField1.setText("");
Dla jButton2:
new AboutDialog().setVisible(true);
Dorabiamy model
Zadaniem klasy Napis jest reprezentacja napisu oraz odwrócenie go. Dla utrzymania minimalizmu, będzie składać się z dwóch konstruktorów, dwóch pól i dwóch metod, ale publiczne będą dwa konstruktory i jedna metoda. Zaczynamy!
Oto szkielet klasy.
public class Napis { }
Najpierw wypełnimy go prywatnymi polami: normalny i wspak. Obydwa typu String.
public class Napis { private String normalny; private String wspak; }
Teraz utworzymy dwa publiczne konstruktory: bezargumentowy i jednoargumentowy. Tak będzie to wyglądać wewnątrz klasy:
public class Napis { private String normalny; private String wspak; public Napis() { normalny=""; wspak=""; } public Napis(String wejscie) { normalny=wejscie; wspak=""; } }
A teraz utworzymy prywatną metodę odwroc() i wstawimy ją za konstruktory (ale wewnątrz klasy). Wygląda ona tak:
private void odwroc() { int len = normalny.length()-1; char[] aarray = new char[len]; for(int j=0; j<len; i++) { aarray[j] = normalny.charAt(len-j); } odwrocony = new String(aarray); }
Jak już mamy metodę odwracającą napis, to zrobimy sobie gettera (taką metodę zapewniającą pośredni dostęp do pól, ale tylko do odczytu), którego zadaniem jest dobranie się do pola odwrocony po to, aby odczytać odwrócony napis. Jego konstrukcja jest następująca:
public String getOdwrocony() { odwroc(); return odwrocony; }
Okno z informacjami o programie
Okno to będzie reprezentowane przez klasę AboutDialog i będzie dziedziczyć po klasie JDialog, tak więc utworzymy klasę odpowiadającą oknu dialogowemu. Będzie wyglądać tak:
Do przycisku dodamy obsługę zdarzenia mouseClicked:
private void jButton0MouseMouseClicked(MouseEvent event) { this.setVisible(false); }
To spowoduje, że okno dialogowe zostanie zamknięte. Okno dialogowe będzie modalne (do initComponents() dodamy setModal(true)).
Pole tekstowe będzie wypełnione zawartością widoczną na ekranie (poniżej znajduje się kod dotyczący tego elementu):
private JTextArea getJTextArea0() { if (jTextArea0 == null) { jTextArea0 = new JTextArea(); jTextArea0.setEditable(false); jTextArea0.setText("Prosty program robiący napisy wspak."); jTextArea0.setAutoscrolls(true); jTextArea0.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { jTextArea0MouseMousePressed(event); } }); } return jTextArea0; }
Następnie dodamy do pola tekstowego zdarzenie mouseEntered:
private void jTextArea0MouseMousePressed(MouseEvent event) { easterEgg(); }
Oraz zdarzenie mouseExited:
private void jTextArea0MouseMousePressed(MouseEvent event) { jTextArea0.setText("Prosty program robiący napisy wspak."); }
Robimy Easter Egga
Nasz Easter Egg ma być niespodzianką, do której dostęp nie będzie taki oczywisty. Do tego będzie takim szczególnym oknem ze szczególną zawartością. Będzie reprezentować go metoda easterEgg(), którą dodamy do klasy AboutDialog. Jej celem jest zmiana napisu na „Are you as creepy as creeper?”.
A oto cała metoda:
private void easterEgg() { jTextArea0.setText("Are you as creepy as creeper?"); }
Podsumowanie
To już koniec przygody z tą wtyczką, bo przeniesiemy się na coś lepszego :D Nauczyliśmy się tworzyć programy z oknami dialogowymi oraz zamykania okien.
Bardziej ciekawskich odsyłam do strony projektu podanej w poprzednim wpisie z tej tematyki oraz do własnych eksperymentów albo do przypatrzenia się generowanemu kodowi, dzięki któremu nauczymy się posługiwania klasami z pakietu javax.Swing.
I na osłodę demonstracja działania programu [youtube=http://www.youtube.com/watch?v=u0EhqpQBU3Q]