JAVA CZ.2 Programowanie obiektowe
Przygotowanie projektu aplikacji 1. File >New Project 2. Z listy Categories z panelu Projects wybieramy Java Application. Nasz wybór zatwierdzamy przyciskiem Next.
3. Wpisujemy nazwę projektu. Okno powinno wyglądać tak i naciskamy Finish:
Dzięki tym czynnością wygenerowaliśmy katalogi projektu
Dzięki tym czynnością wygenerowaliśmy katalogi projektu
Tworzenie kontenera dla komponentów aplikacji
Tworzenie kontenera dla komponentów aplikacji Przystępujemy do tworzenia formatki, czyli okna aplikacji stanowiącego kontener dla komponentów.
Tworzenie kontenera dla komponentów aplikacji Przystępujemy do tworzenia formatki, czyli okna aplikacji stanowiącego kontener dla komponentów. W zakładce Projects, trzeba znaleźć katalog Source Packages, zawierający pusty węzeł default package.
Tworzenie kontenera dla komponentów aplikacji Przystępujemy do tworzenia formatki, czyli okna aplikacji stanowiącego kontener dla komponentów. W zakładce Projects, trzeba znaleźć katalog Source Packages, zawierający pusty węzeł default package. W tym celu w zakładce Projects klikamy prawym przyciskiem myszy katalog naszego projektu i wybieramy opcję New > JFrame form. Pojawi się okienko, do którego w polu Class Name wpisujemy nazwę klasy stanowiącej kontener naszej aplikacji. W polu Package możemy wpisać nazwę pakietu, do którego będzie należała ta klasa. Całość zatwierdzamy przyciskiem Finish.
Z Palette przeciągnij kontener Panel.
Z Palette przeciągnij kontener Panel. Rozciągamy teraz panel, tak by zajął całe okno formatki. We właściwościach ustawiamy kolor tła panelu na zielony, wybierając właściwość background i wciskając przycisk '...'. Można też wpisać odpowiednie wartości RGB w pole obok background.
Z Palette przeciągnij kontener Panel. Rozciągamy teraz panel, tak by zajął całe okno formatki. We właściwościach ustawiamy kolor tła panelu na zielony, wybierając właściwość background i wciskając przycisk '...'. Można też wpisać odpowiednie wartości RGB w pole obok background.
Jeżeli panel jest otoczony uchwytami, to klikamy obok formatki, aby go zdezaktywować.
Jeżeli panel jest otoczony uchwytami, to klikamy obok formatki, aby go zdezaktywować. Z okna Palette wybierz komponent etykety > JLabel. Klikamy komponent i przeciągamy go na obszar panelu.
Jeżeli panel jest otoczony uchwytami, to klikamy obok formatki, aby go zdezaktywować. Z okna Palette wybierz komponent etykety > JLabel. Klikamy komponent i przeciągamy go na obszar panelu. W oknie Properties za pomocą właściwości > foreground ustawiamy kolor tekstu na niebieski. Kolor ustawiamy klikając przycisk '...' lub wpisując odpowiednie wartości barw RGB dla danego koloru.
Jeżeli panel jest otoczony uchwytami, to klikamy obok formatki, aby go zdezaktywować. Z okna Palette wybierz komponent etykety > JLabel. Klikamy komponent i przeciągamy go na obszar panelu. W oknie Properties za pomocą właściwości > foreground ustawiamy kolor tekstu na niebieski. Kolor ustawiamy klikając przycisk '...' lub wpisując odpowiednie wartości barw RGB dla danego koloru. We właściwości text zamieniamy napis jlabel na napis Zamień. Na formatce wyświetli się niebieska etykieta Zamień.
Jeżeli panel jest otoczony uchwytami, to klikamy obok formatki, aby go zdezaktywować. Z okna Palette wybierz komponent etykety > JLabel. Klikamy komponent i przeciągamy go na obszar panelu. W oknie Properties za pomocą właściwości > foreground ustawiamy kolor tekstu na niebieski. Kolor ustawiamy klikając przycisk '...' lub wpisując odpowiednie wartości barw RGB dla danego koloru. We właściwości text zamieniamy napis jlabel na napis Zamień. Na formatce wyświetli się niebieska etykieta Zamień. Można jeszcze w opcji font ustalić czcionkę napisu. Wybierając przycisk '...', znajdujący się za nazwą domyślną czcionki, otwieramy okno dialogowe wyboru atrybutów czcionki, gdzie można zmienić ustawienia.
Dodanie pola tekstowego, czyli komponentu TextField.
Dodanie pola tekstowego, czyli komponentu TextField. Z Palette dodaj > TextField
Dodanie pola tekstowego, czyli komponentu TextField. Z Palette dodaj > TextField Zmień właściwość text wartość na 1. Pole tekstowe będzie miało wartość domyślną 1.
Dodanie pola tekstowego, czyli komponentu TextField. Z Palette dodaj > TextField Zmień właściwość text wartość na 1. Pole tekstowe będzie miało wartość domyślną 1. Wyrównaj zawartość pola do prawej strony ustawiając właściwość horizontalallignment na right (na liście rozwijanej).
Dodajemy z Palette komponent ComboBox czyli listę rozwijaną.
Dodajemy z Palette komponent ComboBox czyli listę rozwijaną. Komponent ten ustawiamy zaraz za etykietą i rozciągamy go trochę na szerokość.
Dodajemy z Palette komponent ComboBox czyli listę rozwijaną. Komponent ten ustawiamy zaraz za etykietą i rozciągamy go trochę na szerokość. Skoro to lista rozwijana to trzeba ustalić etykiety opcji listy. W tym celu należy:
Dodajemy z Palette komponent ComboBox czyli listę rozwijaną. Komponent ten ustawiamy zaraz za etykietą i rozciągamy go trochę na szerokość. Skoro to lista rozwijana to trzeba ustalić etykiety opcji listy. W tym celu należy: wybrać właściwość > model. Następnie klikając przycisk '...', otwieramy okno dialogowe zawierające domyślne etykiety.
Dodajemy z Palette komponent ComboBox czyli listę rozwijaną. Komponent ten ustawiamy zaraz za etykietą i rozciągamy go trochę na szerokość. Skoro to lista rozwijana to trzeba ustalić etykiety opcji listy. W tym celu należy: wybrać właściwość > model. Następnie klikając przycisk '...', otwieramy okno dialogowe zawierające domyślne etykiety.
Dodajemy przycisk
Dodajemy przycisk Aplikacja potrzebuje jeszcze przycisku, który by wywoływał jakieś działanie. Dlatego z okna Palette przeciągamy na formatkę komponent Button.
Dodajemy przycisk Aplikacja potrzebuje jeszcze przycisku, który by wywoływał jakieś działanie. Dlatego z okna Palette przeciągamy na formatkę komponent Button. Właściwość background ustawiamy na kolor granatowy, właściwość font na czcionkę Arial bold 14pt, właściwość text, która jest etykietą przycisku, zaś na napis Przelicz.
Dodajemy przycisk Aplikacja potrzebuje jeszcze przycisku, który by wywoływał jakieś działanie. Dlatego z okna Palette przeciągamy na formatkę komponent Button. Właściwość background ustawiamy na kolor granatowy, właściwość font na czcionkę Arial bold 14pt, właściwość text, która jest etykietą przycisku, zaś na napis Przelicz. Etykieta na wynik
Dodajemy przycisk Aplikacja potrzebuje jeszcze przycisku, który by wywoływał jakieś działanie. Dlatego z okna Palette przeciągamy na formatkę komponent Button. Właściwość background ustawiamy na kolor granatowy, właściwość font na czcionkę Arial bold 14pt, właściwość text, która jest etykietą przycisku, zaś na napis Przelicz. Etykieta na wynik Obok przycisku przeciągamy trzecią etykietę tak samo jak tę o nazwie zamień i ustawiamy jej właściwości font i background na takie same jak poprzednio.
Dodajemy przycisk Aplikacja potrzebuje jeszcze przycisku, który by wywoływał jakieś działanie. Dlatego z okna Palette przeciągamy na formatkę komponent Button. Właściwość background ustawiamy na kolor granatowy, właściwość font na czcionkę Arial bold 14pt, właściwość text, która jest etykietą przycisku, zaś na napis Przelicz. Etykieta na wynik Obok przycisku przeciągamy trzecią etykietę tak samo jak tę o nazwie zamień i ustawiamy jej właściwości font i background na takie same jak poprzednio. Rożnica tylko w tym, że we właściwości text usuwamy zawartość, pozostawiając puste pole. Etykieta ta będzie przechowywała wynik przeliczenia, powinna być zatem niewidoczna.
Dodajemy przycisk Aplikacja potrzebuje jeszcze przycisku, który by wywoływał jakieś działanie. Dlatego z okna Palette przeciągamy na formatkę komponent Button. Właściwość background ustawiamy na kolor granatowy, właściwość font na czcionkę Arial bold 14pt, właściwość text, która jest etykietą przycisku, zaś na napis Przelicz. Etykieta na wynik Obok przycisku przeciągamy trzecią etykietę tak samo jak tę o nazwie zamień i ustawiamy jej właściwości font i background na takie same jak poprzednio. Rożnica tylko w tym, że we właściwości text usuwamy zawartość, pozostawiając puste pole. Etykieta ta będzie przechowywała wynik przeliczenia, powinna być zatem niewidoczna.
Obsługa zdarzeń
Obsługa zdarzeń Za obsługę zdarzeń będzie odpowiadał przycisk Przelicz
Obsługa zdarzeń Za obsługę zdarzeń będzie odpowiadał przycisk Przelicz 1. Klikamy na przycisk JButton
Obsługa zdarzeń Za obsługę zdarzeń będzie odpowiadał przycisk Przelicz 1. Klikamy na przycisk JButton 2. W oknie Properties przechodzimy do zakładki Events.
Obsługa zdarzeń Za obsługę zdarzeń będzie odpowiadał przycisk Przelicz 1. Klikamy na przycisk JButton 2. W oknie Properties przechodzimy do zakładki Events. 3. Pierwszą wypisaną tam metodą jest actionperformed, obok której widnieje tekst <none> oznaczający brak zdefiniowanego uchwytu. Uchwyt to metoda obsługująca zdarzenie kliknięcia przycisku, która zostanie wywołana przez actionperformed(). Klikamy zatem przycisk '...' umieszczony obok tekstu. Otworzy się okienko, w którym klikamy opcję Add.
Tu wkleimy kod obsługujący przycisk
double wynik=0.0; String spole=jtextfield1.gettext().trim(); double fpole=double.parsedouble(spole); int intcombobox1=jcombobox1.getselectedindex(); int intcombobox2=jcombobox2.getselectedindex(); if( (intcombobox1==0 && intcombobox2==0) (intcombobox1==1 && intcombobox2==1) (intcombobox1==2 && intcombobox2==2) ){ wynik=fpole; } else if(intcombobox1==0 && intcombobox2==1){ wynik=fpole/10; } else if(intcombobox1==0 && intcombobox2==2){ wynik=fpole/1000; } else if(intcombobox1==1 && intcombobox2==0){ wynik=fpole*10; } else if(intcombobox1==1 && intcombobox2==2){ wynik=fpole/100; } else if(intcombobox1==2 && intcombobox2==0){ wynik=fpole*1000; } else if(intcombobox1==2 && intcombobox2==1){ wynik=fpole*100; } NumberFormat nf=numberformat.getnumberinstance(); nf.setmaximumfractiondigits(3); String swynik=nf.format(wynik); jlabel2.settext("wynik = "+swynik+" "+jcombobox2.getselecteditem());
Wyjaśnienie do kodu przycisku Na początku deklarujemy zmienną zmiennoprzecinkową typu double, która przechowuje wynik przeliczenia miary długości. Nadajemy jej nazwę wynik. Następnie tworzymy zmienną typu String (łańcuch znakowy). Otrzymuje ona nazwę spole. Zmiennej tej przypisujemy wartość pobraną z pola tekstowego. Wartość tę pobieramy za pomocą metody gettext(). Dodatkowe wywołanie metody trim() spowoduje wycięcie zbędnych spacji, które mogłyby się znaleźć na początku i końcu łańcucha znakowego. By móc wykonywać działania matematyczne na pobranej z pola tekstowego wartości, musimy ten łańcuch znakowy przekonwertować do wartości typu double. W tym celu tworzymy kolejną zmienną typu double o nazwie fpole. Wywołujemy statyczną metodę parsedouble() klasy Double. Jej parametrem jest łańcuch znakowy, który chcemy zamienić na liczbę zmiennoprzecinkową typu double. Z obiektów typu JComboBox pobieramy za pomocą metody getselectedindex() numer indeksu zaznaczonego na liście wartości. Indeksy liczone są od zera (jeśli użytkownik wybierze pierwszy element, oznacza to, że został wybrany indeks zerowy). Wartości indeksów przypisujemy zmiennym typu całkowitego int w zmiennych o nazwach intcombobox1 oraz intcombobox2. W kolejnym kroku za pomocą instrukcji warunkowej if sprawdzamy, czy indeksy z obu list są jednakowe. Jeśli tak, oznacza to, że wartość wpisana do pola tekstowego nie ulegnie zmianie (jest to sytuacja, w której przechodzi przeliczanie milimetrów na milimetry czy metrów na metry). W tym banalnym wypadku wystarczy zmiennej wynik przyporządkować wartość pola. Dla innych kombinacji trzeba będzie przeliczyć wartość wynikową. Po instrukcji if (jeśli) w nawiasach okrągłych podany jest warunek, który powinien być spełniony, aby program mógł wykonać operacje znajdujące się w nawiasach klamrowych. Jeśli warunek nie zostanie spełniony, wykonywane są kolejne warunki podane po instrukcji else if (w przeciwnym wypadku). Po ustaleniu wartości zmiennej wynik przystępujemy do jej sformatowania. Odpowiada za to klasa NumberFormat, która znajduje się w pakiecie java.text.*. Importujemy ten pakiet na początku kodu źródłowego, by oszczędzić sobie wpisywania go przed każdym zapisem klasy NumberFormat. W przeciwnym razie, bez wcześniejszego zaimportowania pakietu java.text, musielibyśmy za każdym razem używać kodu w postaci: java.text.numberformat nf=java.text.numberformat.getnumberinstance();
Jak zaimportować pakiet w Javie? Importowanie pakietu odbywa się poprzez wpisanie na początku pliku źródłowego dyrektywy import oraz nazwy pakietu z nazwą klasy lub znakiem * oznaczającym wszystkie klasy zawarte w tym pakiecie i znaku średnika: import java.text.*; Instancję klasy NumberFormat pobieramy, wywołując jej statyczną metodę getnumberinstance(). Klasa NumberFormat dostarcza metody setmaximumfractiondigits(), służącej ustaleniu maksymalnej liczby cyfr po przecinku. W naszym przykładzie ustawiamy trzy cyfry po przecinku. Następnie wywołujemy metodę format(), która pobiera zmienną typu double. Wartość tej zmiennej zostanie sformatowana według ustawionych przez nas wcześniej zasad. Metoda zwróci już sformatowany łańcuch znakowy. Końcowym etapem działania programu jest przekazanie uzyskanej wartości w postaci tekstu do trzeciej etykiety. Tekst przekazujemy do etykiety, wywołując dla jej obiektu metodę settext() na otrzymanym łańcuchu znakowym. Łańcuchy znakowe można w Javie łączyć za pomocą znaku '+'. Oprócz wartości zmiennej wynikowej podajemy także wartość wybranego elementu z drugiej listy rozwijanej. Dzięki temu po ciągu znaków wartości zostanie dopisana jednostka długości, na którą przeliczaliśmy.
W wykładzie skorzystano m.in. z książki Thinking in java oraz materiałów ze strony http://webhosting.pl/