Programowanie w językach wysokiego poziomu

advertisement
Java:
otwórz okienko
Programowanie w językach wysokiego poziomu
mgr inż. Anna Wawszczak
czwartek, 20 maja 2010
PLAN WYKŁADU
• klasy
wewnętrzne, lokalne i anonimowe
• biblioteka AWT
• zestaw
Swing
➡
JFrame
➡
JPanel
➡
komponenty
➡
obsługa zdarzeń
czwartek, 20 maja 2010
NIETYPOWE KLASY
wewnętrzne, lokalne i anonimowe
Język Java dostarcza specjalne mechanizmy pozwalające definiować
następujące typy klas:
•
klasy wewnętrzne - definicja klasy wewnętrznej znajduje się
wewnątrz definicji innej klasy,
•
lokalne klasy wewnętrzne - definicja lokalnej klasy
wewnętrznej znajduje się wewnątrz metody innej klasy,
•
anonimowe klasy wewnętrzne - anonimowa klasa
wewnętrzna definiowana jest podczas tworzenia obiektu tej klasy;
tworzony jest tylko jeden jej obiekt; klasa anonimowa nie ma nazwy.
czwartek, 20 maja 2010
ANONIMOWE KLASY WEWNĘTRZNE
nie ważne jak się nazywam, ważne co robię
•
Składnia anonimowych klas wewnętrznych:
new TypNadrzedny ( /* arumenty konstruktora typu nadrzędnego */ ) {
"
/* metody i pola składowe klasy anonimowej */
};
•
Wykorzystanie klas lokalnych i lokalnych anonimowych:
public static void main(String[] args) {
"
/* klasa lokalna */"
"
class Osoba {
"
"
String imie; String nazwisko;
"
"
Osoba (String n, String i) { nazwisko = n; imie = i; }
"
"
public String toString() { return imie + " " + nazwisko; }
"
};
"
/* utworzenie obiektu lokalnej klasy anonimowej dziedziczącej po lokalnej klasie Osoba */
"
Osoba pracownik = new Osoba ( "Jas", "Fasolka" ) { /* wywołanie konstruktora klasy Osoba */
"
/* definicja pól i metod rozszerzających funkcjonalność klasy Osoba */
"
"
String stanowisko = "Sprzedawca warzyw";
"
"
public String toString() { return stanowisko + ": " + super.toString(); }
"
};
"
System.out.print(pracownik); // Sprzedawca warzyw: Fasolka Jas
}
czwartek, 20 maja 2010
JAVA AWT
czyli czego nie będziemy używać
Abstract Window Toolkit - biblioteka do „prostego” programowania
GUI (graficznego interfejsu użytkownika) bazująca na „odpowiednikach”.
•
Aplikacje zachowują „wygląd i wrażenie” systemu operacyjnego, na którym
są uruchomione
(ta sama aplikacja uruchomiona na Windows z założenia powinna wyglądać jak natywna aplikacja Windowsowa, a
uruchomiona np. na Mac OSX jak natywna aplikacja na Mac OSX)
•
Poszczególne kontrolki są tworzone jako „odpowiedniki” przez wbudowane
mechanizmy systemu operacyjnego.
Biblioteka powodowała błędy na różnych platformach, przez co slogan firmy SUN dotyczący
Javy zmienił się z „Napisz raz, uruchamiaj wszędzie” na „Napisz raz, debuguj wszędzie”.
czwartek, 20 maja 2010
SWING
...aby okienka otwierały się łatwiej...
Swing to zestaw narzędzi (biblioteka) GUI, który jest częścią Java Foundation
Classes (JFC).
•
Elementy interfejsu użytkownika są rysowane na powierzchni pustych okien.
Jedyne wsparcie wymagane od systemu operacyjnego to utworzenie pustego
okna i możliwość rysowania w nim.
•
Swing posiada bogatszy i łatwiejszy w użyciu zestaw elementów interfejsu
użytkownika.
•
W bardzo małym stopniu zależy od platformy - mniej błędów związanych z
niezgodnością z platformy.
Aby wykorzystywać pakiet Swing należy zaimportować javax.swing.*
czwartek, 20 maja 2010
NASZE PIERWSZE OKIENKO
teoria
Aby utworzyć puste okno należy:
• zdefiniować
• utworzyć
klasę dziedziczącą po JFrame,
obiekt tej klasy,
• ustawić
wielkość okna (domyślnie 0x0 pikseli),
• określić
zachowanie okna w momencie zamknięcia,
• wyświetlić
czwartek, 20 maja 2010
okno.
NASZE PIERWSZE OKIENKO
praktyka
class MojeOkienko extends JFrame{
" public MojeOkienko(){
" " /* ustawienie wysokości i szerokości */
" " setSize(SZEROKOSC,WYSOKOSC);
" " /* ustawienie zachowania w momencie zamknięcia okienka */
" " this.setDefaultCloseOperation(EXIT_ON_CLOSE);
" }
" public static final int SZEROKOSC = 300; /* pikseli */
" public static final int WYSOKOSC = 200; /* pikseli */
}
public static void main(String[] args) {
" MojeOkienko mo = new MojeOkienko();
" mo.show(); /* wyświetlenie okienka */
}
•
Domyślnie okno znika w momencie gdy użytkownik je zamknie, ale program
nie kończy swojego działania.
czwartek, 20 maja 2010
METODY KLASY JFrame
czyli co możemy zrobić z okienkiem
•
dispose() - zamyka okno i zwalnia zasoby systemu używane przy
jego utworzeniu
•
setTitle(String) - ustawia tekst w pasku tytułowym okna
•
setResizable(boolean) - określa czy użytkownik może zmieniać
rozmiar ramki
•
setLocation(int x, int y) - ustawia pozycję okna
•
setBounds(int x, int y, int szerokosc, int wysokosc) - ustawia
jednocześnie pozycję i wielkość okna
czwartek, 20 maja 2010
TOOLKIT
przydatne narzędzia
Toolkit to klasa pozwalająca na pobranie informacji zależnych od
systemu, np. rozmiaru ekranu.
import java.awt.*;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension d = toolkit.getScreenSize();
int szerokosc = d.width;
int wysokosc = d.height;
Zarówno klasa Toolkit jak i Dimension należą do AWT.
Opis innych przydatnych metod udostępnianych przez klasę Toolkit można znaleźć w dokumentacji na stronie
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Toolkit.html
czwartek, 20 maja 2010
DODAWANIE KOMPONENTÓW
czyli co zrobić, żeby okienko nie było puste
• Aby
dodać do okna element interfejsu użytkownika należy
dodać komponent do powierzchni zawartości tego okna:
/* pobranie powierzchni zawartości */
Container powZawartosci = getContentPane();
/* utworzenie komponentu */
Component k = /* ... */;
/* dodanie komponentu k do powierzchni zawartości */
powZawartosci.add(k);
czwartek, 20 maja 2010
PRZYWITAJMY SIĘ
SWING’ujące Hello World
Aby wyświetlić napis należy dodać do powierzchni zawartości komponent JPanel i „namalować” na
tym panelu napis. W tym celu należy:
•
zdefiniować klasę rozszerzającą JPanel,
•
przeładować metodę paintComponent,
•
utworzyć obiekt komponentu i dodać go do powierzchni.
class PowitalnyPanel extends JPanel{
"
int x; int y;
"
public PowitalnyPanel(int pX, int pY) { x = pX; y = pY; }
"
public void paintComponent(Graphics g){
"
"
g.drawString("Witaj w SWING'ującym świecie", x, y); /* narysowanie napisu */
"
}
}
/* w jednej z metod klasy dziedziczącej po JFrame... */
Container powZawartosci = getContentPane();
Component k = new PowitalnyPanel(10,20);
powZawartosci.add(k);
czwartek, 20 maja 2010
DODAWANIE ELEMENTÓW
INTERFEJSU UŻYTKOWNIKA
Aby dodać elementy interfejsu użytkownika takie jak przyciski, pola
tekstowe, należy:
•
utworzyć obiekt komponentu (JTextField, JComboBox,
JRadioButton),
•
dodać komponent do panelu,
•
w przypadku komponentów, które będą później wykorzystywane
należy dodać do klasy okienka referencję do tego komponentu,
która umożliwi modyfikację stanu komponentu.
czwartek, 20 maja 2010
PODSTAWOWE KOMPONENTY
przycisk, etykieta i pole tekstowe
class MojeOkienko extends JFrame
{
!
JTextField poleTekst; /* referencja do tekstu */
!
JPanel panel; /* referencja do panelu */
!
JLabel etykieta; /* referencja do etykiety */
!
!
public void dodajKomponenty()
!
{
!
!
Container powZawartosci = getContentPane();
!
!
panel = new JPanel(); /* utworzenie panelu */
!
!
powZawartosci.add(panel); /* dodanie panelu do powierzchni zawartości */
!
!
!
!
etykieta = new JLabel("Witamy w naszej aplikacji"); /* utworzenie etykiety */
!
!
panel.add(etykieta); /* dodanie etykiety do panelu */
!
!
!
!
JButton przycisk = new JButton("Przycisk"); /* utworzenie przycisku */!
!
!
!
panel.add(przycisk); /* dodanie przycisku do panelu */
!
!
!
!
!
}
poleTekst = new JTextField("Ala ma kotka", 20); /* utworzenie pola tekstowego */
panel.add(poleTekst); /* dodanie pola tekstowego do panelu */
!
!
!
!
!
}
public MojeOkienko(){
!
dodajKomponenty();
!
setSize(300,200);
!
this.setDefaultCloseOperation(EXIT_ON_CLOSE);! !
}
czwartek, 20 maja 2010
OBSŁUGA ZDARZEŃ
teoria
•W
celu obsługi zdarzeń należy utworzyć klasę „słuchacza”
implementującą interfejs ActionListener (pakiet java.awt.event)
oraz zdefiniować w tej klasie metodę actionPerformed.
• Dodać
obiekt klasy „słuchacza” do komponentu za pomocą
metody addActionListener.
• Klasa
słuchacza najczęściej jest implementowana jako klasa
wewnętrzna, lokalna lub anonimowa.
czwartek, 20 maja 2010
OBSŁUGA ZDARZEŃ
praktyka
•
Wykorzystanie klasy lokalnej:
class Słuchacz implements ActionListener {
" public void actionPerformed( ActionEvent e ) {
" " etykieta.setText( poleTekst.getText() );
" }
}" "
przycisk.addActionListener( new Słuchacz() );
•
Wykorzystanie klasy anonimowej:
przycisk.addActionListener( new ActionListener() {
" public void actionPerformed( ActionEvent e ) {
" " etykieta.setText( poleTekst.getText() );
" }
} );
czwartek, 20 maja 2010
Download