• Nie Znaleziono Wyników

Tworzenie aplikacji z interfejsem graficznym przy użyciu pakietu Swing

N/A
N/A
Protected

Academic year: 2021

Share "Tworzenie aplikacji z interfejsem graficznym przy użyciu pakietu Swing"

Copied!
3
0
0

Pełen tekst

(1)

Laboratorium z informatyki sem. II/ćw. 9 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 1

I

NSTRUKCJA DO

Ć

WICZENIA

9

I

Tworzenie aplikacji z interfejsem graficznym przy użyciu pakietu Swing

1. Utwórz w środowisku NetBeans nowy projekt typu Java Class Library o nazwie Projekt9; wybierz folder docelowy i lokalizację projektu. Poleceniem New... z menu podręcznego dodaj do projektu plik typu JFrame Form, nadając nowej klasie nazwę Obliczanie i umieszczając ją w pakiecie o dowolnej nazwie.

2. Przejdź na zakładkę obiektową Design i kliknij wewnątrz ramki, następnie dla właściwości title obiektu JFrame kliknij edytor właściwości . W oknie wpisz tekst: Działania arytmetyczne.

3. Z palety komponentów Swing Controls przeciągnij na ramkę trzy komponenty

Label, trzy komponenty TextField, jeden Button i ComboBox. Rozmieść je zgodnie z rysunkiem pokazanym obok

4. Ustal odpowiednio rozmiary komponentów. Zmień napisy na komponentach (właściwość text) zgodnie rysunkiem. W edytorze właściwości background i foreground zmień dowolnie kolory tła i napisu komponentów. W edytorze

właściwości model komponentu jComboBox1 wpisz kolejno na listę symbole 4 operacji arytmetycznych:

+, -, *, /. We właściwości toolTipText tego komponentu wpisz tekst objaśnienia („dymku”)

Wybierz działanie. Zablokuj możliwość edycji w polu TextField3 usuwając zaznaczenie właściwości editable. 5. Uruchom aplikację (polecenie Run Project lub klawisz F6), sprawdź wygląd okna i możliwość wpisywania liczb

w odpowiednie pola edycji.

II

Oprogramowanie akcji przycisku

6. Należy teraz oprogramować zdarzenie kliknięcia przycisku z napisem Oblicz (jButton1). Metoda obsługi tego zdarzenia powinna odczytać teksty z pól edycji jTextField1 i jTextField2, dokonać ich konwersji na liczby będące argumentami operacji a następnie obliczyć i wyświetlić w polu jTextField3 wynik działania wybranego w jComboBox1. W tym celu utworzymy i oprogramujemy metodę obsługi zdarzenia actionPerformed dla przycisku.

7. W klasie Obliczanie zadeklaruj 3 zmienne typu double o nazwach liczba1, liczba2 i wynik.

8. Zaznacz przycisk Oblicz i w oknie Properties wybierz zakładkę Events. Dla zdarzenia actionPerformed kliknij przycisk a następnie kliknij pole edycyjne z nazwą jButton1ActionPerformed. W ten sposób utworzysz metodę obsługi zdarzenia actionPerformed dla przycisku Oblicz. W edytorze kodu (zakładka Source) powstanie pusta metoda o nazwie jButton1ActionPerformed, której treść należy uzupełnić.

9. Wpisz treść metody jButton1ActionPerformed() następująco:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String s1 = jTextField1.getText();

String s2 = jTextField2.getText();

liczba1=Double.parseDouble(s1);

liczba2= Double.parseDouble(s2);

}

10. Uruchom aplikację, sprawdź efekt kliknięcia przycisku po wpisaniu w polu edycyjnym liczb z kropką dziesiętną i liczby z przecinkiem dziesiętnym.

11. Aby wyeliminować błędy danych wynikające z wpisania w liczbie przecinka zamiast kropki dziesiętnej, zastąp ewentualny przecinek w napisach s1 i s2, odczytanych z pól edycyjnych jTextField1 i jTextField2, znakiem kropki.

W tym celu zmień wywołanie metody parseDouble(s1) na parseDouble(s1.replace("," , ".")) Analogicznie zmień instrukcję konwersji napisu s2.

III

Zabezpieczenie aplikacji przed błędami konwersji

12. Zabezpiecz instrukcje czytania danych z pól edycyjnych przed błędami konwersji (NumberFormatException) instrukcją try…catch. W bloku catch utwórz odpowiednie okienko informacyjne o błędzie:

JOptionPane.showMessageDialog(this,"Błędnie podano wartość liczbową argumentu!",

"Niepoprawne dane", 0);

Wykorzystujemy tu jedno ze standardowych okien dialogu oferowanych przez klasę JOptionPane. Okno dialogowe MessageDialog wyświetla określoną wiadomość tekstową podaną jako drugi parametr wywołania.

Pierwszy parametr o wartości this oznacza, że „rodzicem” okna dialogowego (ang. parent component) jest bieżący obiekt definiowanej przez nas klasy Obliczanie, która rozszerza klasę JFrame, dlatego okno

MessageDialog zostanie wyświetlone na środku ramki.

13. Uruchom aplikację, sprawdź efekt wpisania niepoprawnej liczby w polu edycyjnym.

(2)

Laboratorium z informatyki sem. II/ćw. 9 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 2

IV

Wykonywanie operacji arytmetycznych

14. W bloku try dopisz instrukcje, które obliczają wynik operacji dodawania dwóch liczb przechowywanych w zmiennych liczba1 i liczba2. Dodawanie powinno być wykonane, gdy jako działanie wybierzemy „+”. Działanie to zapisaliśmy na pierwszej pozycji listy jComboBox1, której elementy są numerowane od 0 do 3, ma więc ono numer 0 na liście. Numer wybranej pozycji zwraca metoda getSelectedIndex() obiektu jComboBox1:

switch (jComboBox1.getSelectedIndex()) { case 0:

wynik = liczba1 + liczba2;

break;

}

15. Poniżej dopisz instrukcję wyświetlającą wynik w trzecim polu edycyjnym:

jTextField3.setText(" "+wynik );

16. Uruchom aplikację i sprawdź jej działanie.

17. Wewnątrz instrukcji switch, podobnie jak dla dodawania, dopisz przypadki (case) obliczania różnicy, iloczynu i ilorazu argumentów. Aby wykrywać dzielenie przez zero, przed instrukcją wyliczania ilorazu umieść instrukcję warunkową, która programowo generuje i „wyrzuca” wyjątek przy zerowej wartości dzielnika:

if (liczba2==0) throw new ArithmeticException("Dzielenie przez zero!!!");

18. W instrukcji try…catch, pod blokiem catch(NumberFormatException…{} dodaj drugi blok catch, który będzie przechwytywał wyjątki generowane przy dzieleniu przez zero i wyświetlał odpowiedni komunikat:

catch (ArithmeticException e) {

JOptionPane.showMessageDialog(this, e.getMessage(), "Niepoprawne działanie", 0);

}

19. Uruchom aplikację i sprawdź jej działanie dla różnych operacji i wartości argumentów. Zwróć uwagę na sposób wyświetlania wyniku, gdy nie jest on całkowity.

20. W celu wyświetlania wyniku w postaci sformatowanej, z ustaloną liczbą cyfr znaczących, zastąp instrukcję wypisywania wyniku instrukcjami:

NumberFormat f = new DecimalFormat("0.###");

jTextField3.setText(f.format(wynik));

Pamiętaj o zaimportowaniu odpowiednich klas (są to klasy DecimalFormat i NumberFormat z pakietu java.text) Powyższe instrukcje powodują utworzenie obiektu formatującego o podanym wzorcu (w tym przypadku liczba będzie wyświetlana z 3 cyframi po kropce) a następnie wykonanie formatowania.

21. Uruchom aplikację i sprawdź efekt zmian.

V

Aktualizacja pola wyniku

22. Aby po zmianie wartości argumentów usunąć z pola jTextField3 nieaktualny wynik, zaznacz pole jTextField1 i na zakładce Events utwórz dla tego pola zdarzenie keyTyped. W treści metody o nazwie

jTextField1KeyTyped() wpisz instrukcję kasującą wynik:

jTextField3.setText("");

23. Analogicznie utwórz zdarzenie keyTyped dla pola jTextField2 i w treści wygenerowanej metody

jTextField2KeyTyped() wpisz instrukcję kasującą wynik.

24. Wynik należy kasować również po zmianie operacji wybranej w liście rozwijalnej jComboBox1. Zaznacz komponent jComboBox1 i na zakładce Events utwórz dla niego zdarzenie itemStateChanged. Podobnie jak w punkcie 22, w treści metody jComboBox1StateChanged() wpisz instrukcję czyszczącą pole wyniku.

25. Uruchom i sprawdź działanie aplikacji.

VI

Wyświetlanie wybranych operacji w polu JTextArea

26. Do ramki dodaj dwa przyciski Button z napisami Dopisz i Kasuj oraz pole tekstowe TextArea. Usuń zaznaczenie właściwości enabled przycisku z tytułem Dopisz (jButton2) i

właściwości editable pola tekstowego jTextArea1.

27. Podobnie jak w punkcie 8 instrukcji, utwórz metodę obsługi zdarzenia

actionPerformed dla przycisku Dopisz, która wyświetli w polu tekstowym argumenty i wynik operacji. W treści metody wpisz instrukcje:

String s=liczba1 + (String)jComboBox1.getSelectedItem() + liczba2 + "=" + jTextField3.getText() +"\n";

jTextArea1.append(s);

(3)

Laboratorium z informatyki sem. II/ćw. 9 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 3

28. Aby umożliwić dopisywanie tylko poprawnych operacji, umieść na początku metody

jButton1ActionPerformed() instrukcję blokującą przycisk :

jButton2.setEnabled(false// zablokowanie przycisku

29. Instrukcje blokowania przycisku dopisz również w treściach metod jTextField1KeyTyped(), jTextField2KeyTyped() i jComboBox1StateChanged(). Odblokuj przycisk w odpowiednim miejscu metody jButton1ActionPerformed() (gdy wyświetlasz wynik poprawnie wykonanego działania).

30. Utwórz metodę obsługi zdarzenia actionPerformed dla przycisku Kasuj, która usunie tekst wyświetlony w polu

jTextArea1 po potwierdzeniu tej czynności w dialogu. W treści metody wpisz instrukcję wyświetlania standardowego okna dialogowego z pytaniem o kasowanie tekstu i wyborem YES/NO/CANCEL. W przypadku odpowiedzi YES, w polu jTextArea1 zostanie wyświetlony pusty napis

int odpowiedź = JOptionPane.showConfirmDialog(this, "Czy usunąć zapis?");

if (odpowiedź == JOptionPane.YES_OPTION) jTextArea1.setText("");

31. Uruchom i sprawdź działanie aplikacji.

Zadania do samodzielnego wykonania

1. Utwórz projekt o nazwie Zadanie1 i o nazwie głównej klasy PoleK. Aplikacja wykorzystująca swing ma obliczać pole kwadratu o podanej w polu edycji długości boku. Po naciśnięciu przycisku z napisem OK wynik obliczeń na być wyświetlany na etykiecie czcionką koloru czerwonego, jak na rysunku obok. Zabezpiecz program przed błędem konwersji za pomocą instrukcji try – catch.

2. Utwórz projekt o nazwie Zadanie2 z klasa główną o dowolnej nazwie, potomną klasy JFrame. Umieść na ramce 3 pola edycyjne i przycisk z napisem SPRAWDŹ.. Po kliknięciu przycisku, należy wczytać 3 liczby rzeczywiste wpisane w polach edycyjnych, sprawdzić, czy mogą one być długościami boków trójkąta i wynik sprawdzenia wyświetlić w postaci komunikatu. Zabezpiecz program przed błędem konwersji za pomocą instrukcji try – catch.

3. Utwórz projekt o nazwie Zadanie3 z klasa główną o nazwie Suma, potomną klasy JFrame. Umieść na ramce pole edycyjne, do którego będzie wpisywana liczba całkowita dodatnia n. Po kliknięciu przycisku z napisem Suma należy obliczyć sumę kwadratów kolejnych liczb naturalnych od 1 do n i wyświetlić wynik wraz z opisem w polu TextArea. Zabezpiecz program przed błędami za pomocą instrukcji try – catch.

Cytaty

Powiązane dokumenty

++i lub --i wykonują się najpierw, zanim wykona się wyrażenie, w którym użyto te operatory.. Operatory inkrementacji i dekrementacji

Pierwszy raz w Polsce wykonano wzmocnienie gruntu za przyczółkiem wiaduktu przy użyciu iniekcji geopolimerowych, co w znaczący sposób skróciło czas ograniczenia w ruchu kołowym,

Przykładem opisanej metody jest modelowanie i rozpoznawanie mówcy za pomocą ukrytych modeli Markowa (ang. Hidden Markov Models – HMM), należących do

public static void main(String[] argv) {… } public double

public class FirstAndroidAppActivity extends Activity { /** Called when the activity is first created.. Dodanie przycisku i

• getRootView(): Znajduje główny kontener całego activity ustawiony

• android:layout_alignTop: Określa, że widget powinien być wyrównany swoją górną krawędzią z górną krawędzią widgetu, na który wskazuje znacznik.

• Odpowiadają zarówno za dostęp do danych ja i za konwersje do odpowiednich