Monthly Archives: November 2008

JTextPane w akcji

Jak wspomniałem w jednym z poprzednich wpisów, pamiętam jeszcze czasy Visual Basica bodajże w wersji 4.0 i do dziś mam przed oczami widok pięknie układających się na ekranie elementów. Oczywiście było to śliczne w porównaniu do toporych interfejsów graficznych implementowanych w Turbo Pascalu. W NetBeans na początku wyglądało to dość podobnie. Byłem również święcie przekonany, że tak prozaiczna rzecz jak dodanie do komponenetu tekstowego odpowiednio sformatowanego tekstu nie jest problemem. Jak zazwyczaj ostatnio – myliłem się.

Omyłka jednakże wręcz mnie zdziwiła. Gdybym bowiem w polu tekstowym Swinga chciał odpalić animację flasha z bajerami porażka byłaby dość zrozumiała. W przypadku jednakże JTextPane, troszeczkę zwątpiłem. Dla porządku wykładu:

– podstawowym komponentem tekstowym w Swingu jest JTextField, który to umożliwia edycję i wyświetlanie jednego wiesza tekstu.

– drugim komponentem jest JTextArea. Box ten umożliwia wyświetlanie w oknie wielu linii tekstu, do tego można je edytować. Jedynym ograniczeniem jest fakt, iż JTextArea wyświetla czysty tekst – bez jakichkolwiek wodotrysków.

– nie napisałem o JLabel, ale to zgodnie z nazwą pewna wizytówka innego komponenetu (przynajmniej ja ją tak traktuję), zatem za pełnowymiarowy komponent tekstowy jej nie uważam.

– i na koniec mamy JTextPane, a także klasę wobec niej nadrzędną – JEditorPane. Ja jednakże skupię się na tej pierwszej, gdyż do niej mamy dostęp w palecie NetBeans i to z tym komponentem starałem się coś zrobić.

JTextPane ma w zamyśle umożliwiać wyświetlenie komponenetu tekstowego w aplikacji, wraz ze specjalnie formatowanym tekstem. Moje wymagania na początek nie były jakoś rozbudowane. Mianowicie chodziło mi o pole informacyjne ( metoda JOptionPane.showMessageDialog ), które zawierałoby komponent z ładnie sformatowanymi danymi. Konkretnie chodziło mi o:

– wycentrowanie tekstu

– odpowiedni kolor backgroundu

– margines pomiędzy granicą komponentu, a tekstem (coś a la CSSowy padding).

Nie są to specjalnie wygórowane żądania trzeba przyznać. Jednakże Swing skutecznie się postarał by to wszystko zamotać. Być może moje oczekiwania w stosunku do IDE są zbyt duże i zasadniczo jest dobrze tak jak jest. Nie bardzo mnie to jednakże przekonuje, dlaczego tak prozaiczną rzecz jak ustalenie kilku stylów muszę realizować kodowo odwołując się do 4 różnych obiektów? Oto kod:

JTextPane textPane = new JTextPane();
StyledDocument doc = textPane.getStyledDocument();
MutableAttributeSet standard = new SimpleAttributeSet();

StyleConstants.setAlignment(standard, StyleConstants.ALIGN_CENTER);
StyleConstants.setLeftIndent(standard, 40);
StyleConstants.setRightIndent(standard, 40);

Color szary = new Color(224, 226, 235);
doc.setParagraphAttributes(0, 0, standard, true);
textPane.setBackground(szary);
textPane.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));

Tyle potrzeba pisaniny (ok, da się to pewnie skrócić o linijkę czy dwie wrzucając wywołania nowych obiektów w parametry metod). A nie możnaby zrobić tego w formie D&D prosto w IDE? Niestety nie dało się i dlatego trzeba się bawić z kodem. Nota bene dość ciekawym i mam nadzieję, że jego forma da wszystkim impuls do daleszego poszukiwania wiedzy na temat przyozdabiania komponentów.

Advertisements

Swinguj z nami, czyli piszemy aplikację

Pierwotnie ten wpis był długi. Był… Wystarczy klepnąć nie te klawisze co trzeba i z wpisu zostaje tylko tytuł. Jako człowiek z natury leniwy nie zamierzam poświęcać czasu na jego odtwarzanie zatem przejdę od razu do rzeczy – ostatnie dni (tygodnie?) spędziłem na poznawaniu biblioteki Swing (choć to może za dużo powiedziane). Efektem tegoż poznawania będzie rozwijana przeze mnie aplikacja kliencka do gry typu MUD, przeznaczona w domyśle do gry o wdzięcznej nazwie Arkadia. Najświeższe informacje będzie można znaleźć na specjalnej podstronie bloga, na której będę zamieszczał stosowne informacje.

Pierwsza wersja nie zachwyca zasadniczo niczym 🙂  Ale i nie powstała ona po to, aby zachwycać, ale by dać boosta do dalszej pracy (i nauki oczywiście). Póki co z grą można się połączyć oraz poruszać się w świecie. Oczywiście to wszystko jak w każdym zwykłym kliencie telnetu, ale co mnie to zdrowia kosztowało… Zmagania z okiełznaniem bibliotek oraz strumieni wejsciowych oraz wyjsciowych pewnikiem opiszę niedługo we wpisie merytorycznym.  Na razie zapraszam jednakże do zapoznania się z podstroną projektu. Do gry nie namawiam bo jest wysoce uzależniająca.