Przyszedł czas na definitywne podsumowanie efektywności pisania artykułów. Najpierw najważniejsza wiadomość: opłaciła się ta harówka! Z całą stanowczością. Wyświetlenia skoczyły do góry, parę subskrypcji również. Facebook też się odezwał i powiadomił o dodatkowych zainteresowanych, zatem jestem bliżej niż dalej! Artykuły, tak jak sądziłem, są w postaci fundamentów na których położyłem wszystko to, co istnieje już znacznie dłużej. Ponieważ ich nie było, miałem jedynie sam "dach", który był praktycznie niezauważalny. Sięgajcie do środka w celu ujrzenia dokładnych badań i analiz.

Minęło już sporo czasu więc postanowiłem napisać Wam o postępach nad (zbyt) długo oczekiwanym szablonem i nad (zbyt) długo oczekiwaną grą, która miała nadejść miesiąc temu. W języku C idzie mi już znacznie lepiej, "raylib" jak był wcześniej genialny, tak jest do teraz (zwłaszcza jak wyszedł update 3.0), zatem jakoś idzie. Tylko jak konkretnie? Czy są jakieś z mojej strony spekulacje odnośnie daty wydania? Zapraszam!

Udało się! Tak skonany osiągnąłem wyznaczony przez siebie próg i piszę do Was po raz ostatni dzień po dniu. Jason ma na swojej stronie 250 artykułów!!! Nadszedł czas, aby porządnie odpocząć od ich ciągłego pisania. Nie znaczy to oczywiście, że usiądę sobie na tyłku czekając do końca roku na gwiazdkę z nieba. Zapraszam do artykułu w sprawie szczegółów.

Poznamy teraz kolejny zapis dający wygodę przy wywoływaniu konkretnej funkcji danego obiektu dla każdej instancji przebywającej w kolekcji. Gdzie tam zwykła pętla "for" czy nawet pętla rozszerzona. Nawet wyrażenie lambda ukazane całkiem niedawno można jeszcze bardziej skrócić. Niech Wam posłuży referencja do metody!

Myślę, że na ostatnim wątku zakończymy temat biblioteki Swing i zerkniemy znowu na obsługę wyjątków. To nie będzie kolejna pogadanka o wyjątkach, a tylko o pewnej metodzie wykorzystywanej nałogowo przez wiele osób w programach, filmach czy poradnikach. Widzicie to tyle razy. Za każdym razem gdy ktoś na szybko pisze "try-catch", zwykle osadza to samo wyrażenie po nazwie instancji klasy "Exception". Bez przerwy w przeważającej większości przypadków ludzie zalecą Wam to samo. W książkach wielkimi wołami również jest o tym wspomnienie, a jednak można nie zdawać sobie sprawy co ta metoda robi takiego ekscytującego, że wszyscy to stosują. "printStackTrace". Co to takiego? Zapraszam do środka.

Druga część o metodzie "paintComponent". Na zakończenie dzisiejszej porcji wiedzy, postanowiłem powrócić do tego samego tematu jednak przybliżę Wam teraz możliwości biblioteki Swing i klasy "JPanel" prezentując więcej funkcji rysujących. Konstrukcję podstawową już znacie, zatem nie muszę już dzielić tych tematów na dwie części. Pokażę Wam jak przy pomocy rzutowania instancji typu "Graphics" na "Graphics2D", możecie sobie poszerzyć pole manewrów!

Wznawiam temat serializacji danych w języku Java. Wyobraźmy sobie taką sytuację. Mamy naszą klasę, implementujemy interfejs "Serializable" i każemy programowi zapisać wszystkie dane składowe...oprócz jednej! Takiej małej zmiennej, która powinna być pomijana ze względu na wartość unikalną dla konkretnego uruchomienia aplikacji. O Boże! Czy to znaczy, że z powodu takiej błahostki, serializacja obiektów idzie w drzazgi i trzeba od razu przerzucać cały system przechowywania do pliku tekstowego? Niekoniecznie! Twórcy języka i o takiej sytuacji pomyśleli więc mogę ją teraz zaprezentować. Poznajcie kolejne słowo kluczowe związane z wykluczaniem danych składowych do zapisu, "transient"!

Odczepimy się od technicznych rzeczy, a zajmiemy się artystycznymi. Być może nie wiecie, że Swing oferuje również komponent klasy "JPanel", który może posłużyć Wam do rysowania dowolnych kształtów geometrycznych na ekranie. Czy to linia, czy to kółko, okrąg, prostokąt, obrazek pobrany z pliku. Dzięki poznaniu metody "paintComponent", to wszystko staje się możliwe! Trzeba jednak obchodzić się z nią inaczej niż przy całej reszcie innych funkcji. Dalszy ciąg zostawiam w środku.

Idziemy dalej z biblioteką Swing i językiem Java! Podczas omawiania poprzednich tematów padło już wielokrotnie hasło "BorderLayout". I jak zdążyłem wspomnieć, jest to jeden z "układów" dla rozmieszczania mniejszych komponentów na "ramce" o nazwie "JFrame". Ale co to jest "układ"? Co to jest "BorderLayout"? I jakie mogą być jeszcze inne układy jeśli twierdzę, że ten przytoczony to tylko jeden z nich? Niech zawartość artykułu rozwieje te wątpliwości raz na zawsze!

Ponownie zmierzamy w stronę dylematu "podpinania" zdarzeń do przycisków w Javie przy pomocy biblioteki Swing. Mamy klasy wewnętrzne, a teraz wyrażenie lambda przybliży nas do celu. Gdy zobaczycie jak je zastosować do przycisku, nie będę musiał się nawet pytać która z metod wydaje się Wam przyjemniejsza. Bez ceregieli. Obsługa zdarzeń za pomocą wyrażenia lambda!

Przystępujemy do następnego artykułu po zapowiedzianej dłuższej przerwie. Przyznajcie szczerze, niezbyt piękny był ten zapis z klasami, prawda? Tak trzeba było pisać zanim pojawiła się Java 8. OK, teraz przystąpimy do bardziej nowoczesnego sformułowania. Ono istnieje już od sześciu lat więc o nim też mogliście już nieraz usłyszeć. Przedstawiam Państwu "wyrażenie lambda" (ang. "lambda expression")!

I to już będzie ostatnia część na dzisiejszy dzień, zatem powracamy do tego samego pytania: "jak zaprogramować zdarzenie do przycisku tak, aby po jego naciśnięciu coś się wydarzyło?". Dłuży się to niemiłosiernie, natomiast trzeba aż tak wielu wyjaśnień, aby korzystać z tego świadomie i rozsądnie. Znamy już klasy wewnętrzne, ich budowę, dowiemy się teraz jak mogą nam pomóc w rozwiązaniu problemu. Samo tworzenie zdarzeń w Javie określane jest jako "obsługa zdarzeń" tak jak to mieliśmy z wyjątkami, co nie? Przechodzimy do tematu.

Nie możemy dalej iść z biblioteką Swing dopóki nie zapoznamy się ze sposobami "podpinania" zdarzeń. Istnieją dwie metody: starsza istniejąca od Javy 5.0 (2004) i nowsza od Javy 8 (2014). Pokażę Wam obie i podzielę to na dwie części. Najpierw struktura sama w sobie, a potem jak ją wykorzystać i "podstawić" do przycisku, aby coś się wydarzyło po jego naciśnięciu. Oto pierwsza metoda: klasa wewnętrzna. Szczegóły w środku!

Kontynuujemy pisanie o bibliotece Swing języka Java. Aby w ogóle robić coś porządnego, trzeba najpierw zapoznać się ze wszystkimi podstawowymi komponentami jakie oferuje Swing. Jeśli zainteresowałem Was tym tematem mającym za sobą ponad 20 lat (i co z tego?), przechodzimy od razu do konkretów. To będzie na razie sama lista z wyjaśnieniami co do czego służy i jak prezentuje się w oknie.

4 maja, zaczynamy kolejną serię! Będę miał przyjemność pisać Wam na temat biblioteki Swing należącej do Javy, która pozwala na tworzenie graficznych interfejsów użytkownika. Nie będzie o JavaFX! Wiem o jej istnieniu, ale mam swoje powody aby o niej teraz nie pisać. Jak utworzyć pierwsze okno i dlaczego w Swing zapraszam do artykułu.

Ostatnia wypowiedź na dzisiaj (dotycząca Javy oczywiście) sięgać będzie tematu formatowania danych w postaci łańcuchów znaków, czyli typu "String". Nie chodzi tylko o konwertowanie liczb na łańcuchy, ale także ich ładne prezentowanie. Na przykład wypisanie dużej liczby z odstępami, czy też wyświetlenie wyników danej kolumny z tabelki o tej samej szerokości pola, aby kolejne dane się "nie rozjeżdżały". Prezentowana tutaj metoda która nam to umożliwi to "String.format". Zapraszam już po raz ostatni w dniu Konstytucji 3 Maja!

Dosłownie na chwilę odejdziemy od Javy, bo pragnę zabrać głos w sprawie rozwoju własnej działalności. Mamy początek maja i chyba wreszcie coś zaczyna się poprawiać w zakresie widoczności strony na Google. Kursy online otrzymują od dłuższego czasu większe zainteresowanie na YouTube! Zostało mi już bardzo niewiele, aby dojść do końca i zrównać się z pewną konkurencją. Zobaczymy wówczas czy będę miał argument by się wściec...

Czy przyszła Wam do głowy jedna okoliczność związana ze słowem kluczowym "throws" omawianym tutaj? Obsługa wyjątków kryje jeszcze jedną tajemnicę. Jak wspomniałem, "throws" "przerzuca" odpowiedzialność obsłużenia zgłoszonego wyjątku metodzie wywołującej. A co w przypadku gdy "main" posiada taką definicję? Jakie konsekwencje mogą z tego wyniknąć? Czytajcie dalej, a okaże się to ciekawsze od powieści kryminalnej.

Zabieram się za kolejną porcję obfitego redagowania na własnej stronie. Znowu Java bez zmian i opowiem czym jest import statyczny oraz czym się on różni od zwykłego. To również stanowi jedynie element poboczny i może pomóc lub zaszkodzić w zależności od tego, kto czyta nasz kod. Nie migajcie się, poznajcie kolejny element o którym się mało mówi.

Jest jeszcze wczesna godzina, zatem macie moją wypowiedź już po raz czwarty z rzędu TEGO SAMEGO DNIA! Nie wiem jak ja to znoszę i póki co, nie chcę się nad tym zastanawiać. Przechodzimy do kolejnego prostego tematu związanego z Javą, który macie traktować jako całkowicie opcjonalny. Dotyczy on statyczności, jest rzadko stosowany, a to coś kryje się pod nazwą "inicjalizator statyczny". Poznajcie szerzej ten termin razem z przykładem pozostawionym w środku.