Laboratorium z informatyki sem. II/ćw9 Wydział Transportu PW – 2020/21
Materiały do użytku wewnętrznego strona 1
MATERIAŁYPOMOCNICZEDOĆWICZENIA 9
Aplikacja wykorzystująca pakiet Swing
Pakiet Swing, będący częścią biblioteki Java Foundation Classes, umożliwia tworzenie w języku Java
interaktywnych interfejsów graficznych, pozwalających na wprowadzanie danych za pomocą myszki, klawiatury i innych urządzeń tego typu. Wszystkie składniki tego pakietu zostały całkowicie zaimplementowane w języku Java, co zapewnia zgodność i niezależność wyglądu poszczególnych składników pakietu na różnych platformach.
Pierwszym etapem tworzenia aplikacji z wykorzystaniem pakietu Swing jest utworzenie klasy, która będzie
reprezentowała graficzny interfejs użytkownika. Obiekt tej klasy stanowi kontener przechowujący poszczególne składniki interfejsu.
Klasa JFrame
W większości aplikacji takim głównym obiektem interfejsu jest albo okno proste (obiekt klasy JWindow), albo ramka (obiekt klasy JFrame), czyli okna z paskiem tytułu oraz z przyciskami Minimalizuj, Maksymalizuj , Zamknij. Jednym ze sposobów utworzenia graficznego interfejsu użytkownika wykorzystującego pakiet Swing jest zdefiniowanie go jako podklasy klasy JFrame, tak jak to zrobiliśmy w naszym ćwiczeniu.
Komponenty biblioteki Swing
Pakiet javax.swing zawiera zestaw klas, służących do tworzenia graficznego interfejsu użytkownika, nazywanego w skrócie GUI (Graphical User Interface). Poszczególne składniki pakietu Swing (między innymi takie jak przyciski, listy, etykiety czy pola wyboru) mają jedną wspólną klasę bazową javax.swing.JComponent. W klasie tej są
zdefiniowane właściwości wspólne dla wszystkich komponentów oraz metody używane m.in. do pobierania (get) i nadawania (set) tych właściwości. Jedną z właściwości wspólnych dla różnych klas komponentów jest text, czyli napis widoczny na komponencie. Do określania treści tego napisu oraz do jego pobierania służą odpowiednio metody setText()
oraz getText().
Składniki pakietu Swing mogą reagować na określonego typu zdarzenia; najprostszym przykładem zdarzenia jest kliknięcie myszką przycisku.
W ćwiczeniu umieszczamy na kontenerze klasy JFrame komponenty następujących klas pakietu Swing:
• JButton - przyciski są jednym z najczęściej używanych elementów graficznego interfejsu użytkownika. Zwykle mają napisy lub ikony, a ich podstawową funkcją jest reagowanie na akcję użytkownika.
• JLabel - klasa JLabel służy do tworzenia etykiet umożliwiających wyświetlanie tekstu, ikony, lub obydwu tych elementów naraz w jednym wierszu. Etykiety są wykorzystywane do opisywania innych komponentów.
• JTextField -: obiekty klasy JTextField stanowią pola tekstowe, które umożliwiają wyświetlanie, wpisywanie i modyfikowanie tekstu, którego rozmiar jest ograniczony do jednego wiersza.
• JTextArea - klasa JTextArea umożliwia wyświetlanie i (opcjonalnie) edycję wielowierszowego tekstu.
Cały tekst zawarty w polu wyświetlany jest ustaloną czcionką i jednolitym stylem. W aplikacji zastosowaliśmy komponent do wyświetlenia historii obliczeń.
• JComboBox - klasa ta umożliwia tworzenie list rozwijalnych z możliwością edycji. Klasa JComboBox posiada między innymi następujące metody:
➢ getItemCount() - zwraca ilość elementów na liście
➢ getSelectedIndex () - zwraca pozycję na liście aktualnie zaznaczonego elementu (elementy są numerowane od 0); jeśli żaden element nie jest zaznaczony, to metoda zwraca -1.
➢ setSelectedIndex(i) – zaznacza element listy znajdujący się na pozycji wskazanej przez parametr i
➢ getSelectedItem() - zwraca element aktualnie zaznaczony na liście (klasy Object)
Gdy dokonujemy wyboru elementu komponentuJComboBox, zachodzi zdarzenie itemStateChanged. Elementy listy JComboBox są klasy Object, aby wykorzystać je jako napisy lub liczby, trzeba wykonać konwersję, np.
dla napisu : String s = (String)(jComboBox1.getSelectedItem());
dla liczby całkowitej: int i =Integer.parseInt((String)(jComboBox1.getSelectedItem()));
dla liczby rzeczywistej: double x =Double.parseDouble((String)(jComboBox1.getSelectedItem()));
Uwaga: W środowisku NetBeans podczas wstawiania dowolnego składnika na ramkę z palety komponentów, w metodzie initComponents() jest automatycznie generowany kod, który dodaje dany składnik do aplikacji, wywołuje jego konstruktor oraz metody nadające mu odpowiednie właściwości. Aby zobaczyć treść tej metody, należy kliknąć ikonę ze znakiem + obok wiersza z napisem „Generated Code”. Metoda initComponents() musi być wywołana w konstruktorze ramki jako pierwsza.
Konwersja tekstu na liczby rzeczywiste
Do przekształcania tekstów w liczby rzeczywiste stosuje się statyczną metodę parseDouble()klasy Double, np:
String t = "125.5";
double a = Double.parseDouble(t);
Przy przekształcaniu tekstu w liczbę może pojawić się błąd i metoda tworzy wtedy wyjątek klasy
NumberFormatException, dlatego należy ją wywoływać w bloku try ... catch
Laboratorium z informatyki sem. II/ćw9 Wydział Transportu PW – 2020/21
Materiały do użytku wewnętrznego strona 2
Instrukcja wyboru switch
Instrukcja switch umożliwia wybór i wykonanie jednej z kilku zawartych w niej instrukcji, zależnie od wartości wyrażenia. Instrukcja switch ma postać:
switch (wyrażenie) { case wartość1 : Instrukcja1; break;
case wartość2 : Instrukcja2; break;
...
default Instrukcja;
}
Wyrażenie sterujące wyborem musi być typu całkowitego. Jeśli ma ono jedną z wymienionych w case wartości, to wykonywana jest odpowiednia instrukcja. Jeżeli nie zostanie odnaleziona żadna klauzula case odpowiadająca wartości wyrażenia, wówczas wykonywane są instrukcje zawarte w klauzuli default, która jest opcjonalna i może być pominięta.
Na końcu każdej klauzuli case należy umieścić polecenie break, które przerwie wykonywanie bloku switch.
Obsługa wyjątków w Javie – programowe generowanie wyjątków
Błąd, który powstaje podczas wykonywania programu, powoduje utworzenie wyjątku. Wyjątek jest obiektem klasy Exception, która jest pochodną klasy Throwable. Aby uzyskać informację o wyjątku, można wykorzystać jedną z metod tej klasy:
getMessage () - podaje komunikat związany z wyjątkiem,
toString() - podaje komunikat związany z wyjątkiem i dodatkowo nazwę klasy wyjątku.
Metody klas Javy, w których wykonaniu mogą wystąpić błędy czyli wyjątki, powinny obsługiwać je w swojej treści lub wyrzucać je na zewnątrz (ang. throw); wówczas za obsługę błędu jest odpowiedzialna metoda wywołująca.
Możliwe jest programowe generowanie wyjątków za pomocą instrukcji throw. W programie zastosowaliśmy instrukcję:
if (liczba2 == 0) { throw new ArithmeticException("Dzielenie przez zero!!!"); }
Utworzyliśmy tu obiekt klasy ArithmeticException i zgłosiliśmy wystąpienie wyjątku. Parametr konstruktora jest typu
String i określa komunikat związany z tym wyjątkiem. Komunikat ten został następnie uzyskany za pomocą metody
getMessage() i wykorzystany w instrukcji obsługującej wyjątek.
Formatowanie liczb dziesiętnych
Do formatowania tekstowej reprezentacji liczb w Javie można wykorzystać klasę NumberFormat zawierającą wzorce i metody formatowania wartości liczbowych, walutowych i dat. Dla liczb rzeczywistych można określić ilość miejsc dziesiętnych za pomocą obiektu klasy DecimalFormat i metody format(). Parametrem konstruktora klasy
DecimalFormat może być wzorzec zawierający symbole, które opisują format tekstowego zapisu liczby dziesiętnej.
Są to między innymi:
0 – cyfra
# - cyfra z pominięciem nieznaczących zer . – separator dziesiętny
Aby sformatować wartość zmiennej rzeczywistej wynik z trzema cyframi dziesiętnymi zastosowaliśmy instrukcje:
NumberFormat f = new DecimalFormat(”0.###”);
jTextField3.setText(f.format(wynik));
Okna typu Message Dialog
Zadaniem tego okna jest wyświetlenie informacji na ekranie. Okno to tworzymy poprzez wywołanie jednej z metod
showMessageDialog(Component, Object);
showMessageDialog(Component, Object, String, int);
gdzie poszczególne parametry mają następujące znaczenie:
Component jest komponentem nadrzędnym dla wyświetlanego okna,
Object jest łańcuchem tekstowym , komponentem albo ikoną wyświetlaną w powstałym oknie
String jest łańcuchem tekstowym wyświetlanym w pasku tytułowym okna
int jest jedną z pięciu zmiennych klasy określającą rodzaj okna :
ERROR_MESSAGE,INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, WARNING_MESSAGE
Metoda wykorzystuje 4 standardowe ikony zależnie od typu komunikatu:
ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE
Przykład:
JOptionPane.showMessageDialog(this,
"Błędnie podano wartość liczbową argumentu!", "Niepoprawne dane",0);