• Nie Znaleziono Wyników

 Projektowanie interfejsu graficznego

N/A
N/A
Protected

Academic year: 2021

Share " Projektowanie interfejsu graficznego"

Copied!
3
0
0

Pełen tekst

(1)

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

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

I

NSTRUKCJA DO

Ć

WICZENIA 10

Utwórz aplikację, która będzie generowała całkowite liczby losowe. Przedział losowania liczb jest ustawiany na suwakach (klasa JSlider). Wylosowane liczby są zapisywane i wyświetlane w tabeli (klasa JTable). Menu umożliwia wykonanie operacji na tabeli oraz zapis i odczyt danych z pliku.

Projektowanie interfejsu graficznego

1. Utwórz projekt na bazie klasy JFrame z pakietu Swing, zgodnie z punktem I.1 instrukcji do ćw.8. Projektowi nadaj nazwę Projekt10, a klasie głównej nazwę Tabela. Nadaj ramce tytuł Operacje na tabeli.

2. Z palety komponentów Swing Containers przeciągnij na ramkę komponent Panel (klasy JPanel), nadaj mu zielony kolor tła we właściwości background.

3. Z palety komponentów Swing Controls przeciągnij:

• na panel − etykietę i dwa komponenty Slider

• bezpośrednio na ramkę – etykietę , komponent

Table oraz przycisk Button.

Rozmieść komponenty zgodnie z rysunkiem. Zmień napisy na przycisku i etykietach. Zmień kolor czcionki na etykietach ustawiając odpowiednio właściwość foreground. Zwróć uwagę, że w oknie Navigator jest widoczna hierarchia komponentów.

Uwaga: Wstawienie komponentu Table spowoduje automatyczne umieszczenie go na komponencie ScrollPane.

4. Dla komponentu jSlider1 kliknij edytor właściwości border i wybierz z listy TitledBorder. Jako title wpisz OD, a jako position wybierz z listy AboveTop. Podobnie postąp z komponentem jSlider2, wpisując tekst DO.

5. Dla komponentu jSlider1 ustaw właściwości: major TrickSpacing na 1, minimum na -10, maximum na 0, oraz zaznacz właściwości: paintLabels, paintTricks, paintTracks, snapToTicks. Dla komponentu jSlider2 ustaw właściwości: minimum na 0, maximum na 10 i pozostałe właściwości -analogicznie jak dla jSlider1.

6. Dla komponentu jTable1w edytorze właściwościmodel ustaw liczbę wierszy na

8

a liczbę kolumn na

5.

Zablokuj możliwość edycji, usuwając dla każdej kolumny zaznaczenie Editable

.

Nadaj kolumnom nagłówki od A do E i dla atrybutu Type wybierz z listy wartość Integer.

 Oprogramowanie metod obsługi zdarzeń

1. Utwórz pomocniczą metodę losowanie(), która wylosuje liczby całkowitego z przedziału wybranego z użyciem suwaków oraz wyświetli je jako elementy tabeli:

private void losowanie(){

Random r = new Random(); //generator liczb losowych int x = 0; //zmienna pomocnicza int m = jSlider1.getValue(), n = jSlider2.getValue();

for (int i = 0; i < jTable1.getRowCount(); i++) { for (int j = 0; j < jTable1.getColumnCount(); j++) { x = m + r.nextInt(n - m + 1);

jTable1.setValueAt(x, i, j);

} } }

2. Zaznacz komponent jSlider1, a następnie na zakładce Events utwórz dla niego metodę obsługi zdarzenia

stateChanged, która będzie wykonana przy zmianie położenie suwaka.

3. W treści tej metody dodaj wywołanie metody losowanie().

private void jSlider1StateChanged (javax.swing.event.ChangeEvent evt){

losowanie();

}

Podobnie oprogramuj zdarzenie stateChanged suwaka jSlider2 i zdarzenie actionPerformed przycisku Losuj.

4. W konstruktorze klasy Tabela, po wywołaniu metody initComponents() dopisz wywołanie metody losowanie();

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

(2)

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

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

Tworzenie menu aplikacji

1. Dodaj do ramki komponent MenuBar z grupy komponentów SwingMenus. Kliknij prawym przyciskiem myszy na pierwszym menu i za pomocą Edit Text zmień jego tytuł z File na Plik; podobnie zmień tytuł drugiego menu na

Operacjena tabeli.

2. Aby utworzyć kolejne polecenia menu Plik, należy użyć polecenia z menu podręcznego AddFromPalette |MenuItem. Aby zmienić tytuły poleceń, należy je kliknąć prawym przyciskiem myszy i z menu podręcznego wybrać opcję Edit Text W ten sposób utwórz dwie grupy menu pokazane na rysunku:

3. Poniżej tabeli dodaj do ramki etykietę, komponent Spinner, który posłuży do wyboru numeru wiersza, oraz pole tekstowe TextField do wyświetlania obliczonej sumy. Wyczyść pole tekstowe i wpisz tekst etykiety według rysunku.

4. Dla komponentu jSpinner1 otwórz edytor właściwości model i wybierz typ modelu Number (domyślnie są to obiekty klasy Integer); ustaw Minimum na 0, oraz Maximum na 7.

5. Dla polecenia menu o tytule Sumawiersza, utwórz metodę obsługującą zdarzenie actionPerformed, które dla wybranego numeru wiersza oblicza sumę jego elementów. W treści metody wpisz następujące instrukcje:

int i = (Integer) jSpinner1.getValue(); //numer wiersza tablicy int suma = 0;

for (int j = 0; j < jTable1.getColumnCount(); j++)

{

suma += (Integer) jTable1.getValueAt(i, j);} // zmiana typu Object na typ Integer jTextField1.setText("" + suma);

6. Utwórz metodę obsługującą zdarzenie StateChanged dla komponentu jSpinner1 i wpisz w jej treści instrukcję usuwającą wynik sumowania z pola jTextField1.

7. Na końcu treści metody losowanie(), generującej nową zawartość tabeli, dodaj instrukcje czyszczącą pole tekstowe

jTextField1.

8. Oprogramuj polecenie menu Czyść tabelę, które powinno wypełnić zerami tabelę jTable1 oraz usunąć wynik sumowania z pola tekstowego.

9. Oprogramuj polecenie Zapiszwyniki, zapisujące wylosowane liczby do pliku tekstowego o lokalizacji i nazwie podanej w dialogu. W treści metody obsługi zdarzenia actionPerformed tego polecenia wpisz instrukcje:

try {

FileDialog fd = new FileDialog(this, "zapis", FileDialog.SAVE);

fd.setVisible(true);

if(fd.getFile() !=null) {

String nazwaPliku = fd.getDirectory() + fd.getFile();

FileWriter wy = new FileWriter(nazwaPliku + ".txt");

for (int i = 0; i < jTable1.getRowCount(); i++){

for (int j=0; j < jTable1.getColumnCount(); j++) wy.write((jTable1.getValueAt(i, j)) + " ");

wy.write("\r\n");

}

wy.close();

JOptionPane.showMessageDialog(this, "Wyniki zostały zapisane w pliku "+nazwaPliku + ".txt");

}

}catch (IOException e) {JOptionPane.showMessageDialog(this, e.getMessage());}

10. Oprogramuj polecenie zakończ, które kończy pracę programu po potwierdzeniu w dialogu. W metodzie obsługującej zdarzenie actionPerformed wpisz nastepujące instrukcje:

int wynik = JOptionPane.showConfirmDialog(this,"Czy na pewno zakończyć działanie?", "Potwierdź", JOptionPane.YES_NO_OPTION);

if (wynik == JOptionPane.YES_OPTION) dispose();

11. Sprawdź działanie poleceń menu aplikacji.

12. Do menu Plik dodaj dodatkowe polecenie o tytule Odczyt z pliku

(3)

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

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

13. W treści metody obsługi zdarzenia actionPerformed tego polecenia wpisz instrukcje, które umożliwią wyświetlenie w tabeli wartości całkowitych odczytanych z pliku tekstowego, wybranego w dialogu .(odczytaj dane z pliku utworzonego w punkcie 9.)

int liczba = jTable1.getRowCount() * jTable1.getColumnCount();

String nazwaPliku = "";

try {

FileDialog fd = new FileDialog(this, "odczyt", FileDialog.LOAD);// okno modalne fd.setVisible(true);

if (fd.getFile() != null) {

nazwaPliku = fd.getDirectory() + fd.getFile();

Scanner sc = new Scanner(new File(nazwaPliku));

for (int i = 0; i < jTable1.getRowCount(); i++) { for (int j = 0; j < jTable1.getColumnCount(); j++) { jTable1.setValueAt(sc.nextInt(), i, j);

} }

sc.close();

JOptionPane.showMessageDialog(this, "Wyniki zostały poprawnie odczytane z pliku " + fd.getFile());

}

} catch (FileNotFoundException e) {

JOptionPane.showMessageDialog(this, "Pliku o podanej nazwie nie istnieje", "błąd", 0);

} catch (InputMismatchException e) {

JOptionPane.showMessageDialog(this, "Plik powinien zawierać " + liczba + " wartości

całkowitych", "Zły typ danych w pliku o nazwie : " + nazwaPliku, 0);

}

Zadania do samodzielnego wykonania

1. Dodaj do menu kolejne polecenie o nazwie suma kolumny i oprogramuj je analogicznie do polecenia suma wiersza, wyświetlając wynik w polu jTextField2.

2. Zastąp komponent Spinner, służący do wyboru numeru wiersza, komponentem ComboBox.

3. Dodaj do menu polecenie min&max, które znajduje w tabeli wartości minimalne i maksymalne oraz wyświetla, metodą klasy JOptionPane, rzeczywisty przedział wylosowanych liczb w postaci <min, max>, z odpowiednim opisem.

4. Zmodyfikuj program tak, by generowane były liczby rzeczywiste.

5. Zmodyfikuj instrukcje zapisu tabeli do pliku tak, aby liczby rzeczywiste były zapisywane w postaci sformatowanej z ustaloną liczbą cyfr znaczących.

6.

Zmodyfikuj zapis do pliku tak, aby zapisywać również sumę w wybranym wierszu i kolumnie wraz z opisem.

Cytaty

Powiązane dokumenty

Zaimplementować w Prologu predykat opisujący metodę tabel semantycznych dla rachunku zdań4. Zaimplementować w Prologu predykat opisujący metodę rezolucji dla

 Podzapytania zapewniają alternatywny sposób wykonywania zadań, które w inny sposób można realizować tylko poprzez skomplikowane złączenia.. Niektórych zadań

[r]

Ilość zagospodarowanych odpadów węglowych i popiołu lotnego wynosiła 821 150 Mg na rok, a wskaźnik przeżycia roślinności w obszarze zapobiegania pęknięciom gruntu osiągnął

Przed przystąpieniem do współzawodnictwa przygotujcie puchary dla zwycięzcy: butelka lub karton po soku, wąskie pudełko, które można postawić pionowo lub inny wasz

• Parametr argc zawiera liczbę argumentów (ang. argument count) przekazywanych do programu. Jego wartość wynosi co najmniej 1, ponieważ nazwa programu jest również traktowana

Każdy IFL jest oceniany na podstawie ilości DET i RET a następnie na tej podstawie ustalana jest ilość nieskorygowanych

• Interfejs użytkownika jest dobrze zaprojektowany wówczas, gdy model programu jest zgodny z