Zaawansowane programowanie obiektowe. Wykład 3 część 2

Podobne dokumenty
Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java - interfejs graficzny

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Kontenery i komponenty graficzne

Java biblioteka Swing

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Programowanie graficznych interfejsów użytkownika

Programowanie obiektowe

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Język JAVA podstawy. Wykład 5, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Tworzenie elementów graficznych

Pierwsza ramka. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 10

SWING. dr Jarosław Skaruz

Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018

Programowanie zdarzeniowe

Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy. Tworzenie łącz w apletach

Wykład 4_1. Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy.

Programowanie w Javie Wykład 6 Okienka w Javie (AWT)

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Graphic User Interfaces pakiet Swing

PROGRAMOWANIE APLIKACJI MULTIMEDIALNYCH

Tworzenie i obsługa graficznego interfejsu uŝytkownika

SWING ZAGADNIENIA: wprowadzenie, kontenery I komponenty, LayoutManager, komponenty tekstowe.

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

Podstawy Języka Java

Aplikacje w środowisku Java

Obsługa zdarzeń. Wykład 4

Programowanie obiektowe

Programowanie zdarzeniowe

Java Foundation Clases. Tworzenie graficznych interfejsów użytkownika (GUI) w Javie

Aplikacja wielowątkowa prosty komunikator

Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie Obiektowe GUI

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Aplikacja wielow tkowa prosty komunikator

Aplikacje w Javie wykład 12 Programowanie GUI

setdefaultcloseoperation(jframe.exit_on_close);//obsługa zamykania aplikacji setvisible(true); } //wyświetlenie okna

Dokumentacja do API Javy.

LABORATORIUM 7 Cel: 1_1

Język Java część 2 (przykładowa aplikacja)

Programowanie w środowisku graficznym- wykład 9 Programowanie GUI cz1

Programowanie w języku JAVA. Wykład IV Swing - GUI

SWING ZAGADNIENIA: wprowadzenie, kontenery i komponenty, LayoutManager, komponenty tekstowe. inne przydatne komponenty.

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Programowanie w języku Java WYKŁAD

Klasy abstrakcyjne. Klasę abstrakcyjną tworzymy przy pomocy modyfikatora abstract

Aplikacje w Javie wykład 12 Programowanie GUI

Kurs programowania. Wykład 5. Wojciech Macyna. 31 marzec 2016

Podstawy Swing. Tomasz Borzyszkowski

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Programowanie graficznych interfejsów uŝytkownika

Programowanie Obiektowe Java

1 Atrybuty i metody klasowe

Scenariusz Lekcji. Część organizacyjna:

1. Język JAVA. 1. Pierwszy program. 2. Kalkulator. 3. Klasy. 4. Dziedziczenie

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie obiektowe

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Podstawowe informacje o apletach

Grafika i komunikacja człowiek komputer Laboratorium. Część 2: Graphics

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 5, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykład 4: Klasy i Metody

Obsługa zdarzeń w JAVIE ((ActionListener,ItemListener,TableModelListener))

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

DOSTĘP DO METOD I ZMIENNYCH, TABLICE. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001)

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Język Java część 2 (przykładowa aplikacja)

Programowanie w Javie

Spis treści. 1 Aplet. 2 Od aplikacji do apletu. 1 Aplet 1. 2 Od aplikacji do apletu 1. 3 Budowa apletu 3. 4 Cykl życia apletu 4

Przykładowe roz wiązanie:

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Podstawy Języka Java

Henryk Budzisz. materiały przygotowane w ramach projektu ZPORR nr POKL /08-00

Języki i metody programowania Java Lab2 podejście obiektowe

Programowanie Multimediów. Programowanie Multimediów JAVA. programowanie GUI. (AWT i Swing) [1]

Iteracyjno-rozwojowy cykl oprogramowania 4

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Zaawansowane aplikacje WWW - laboratorium

GUI - projektowanie interfejsów cz. II

Przypomnienie o klasach i obiektach

Projektowanie aplikacji internetowych laboratorium

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

JAVA 2: PROGRAMY Z GRAFICZNYM INTERFEJSEM UŻYTKOWNIKA 1. WSTĘP

Java SE Laboratorium nr 5. Temat: Obsługa zdarzeń

Transkrypt:

Zaawansowane programowanie obiektowe Wykład 3 część 2

Środowisko Eclipse

Tworzenie projektu File New project Java project

Dodanie klasy File New Class

Praca w Eclipse

Przykład 1 import java.awt.*; public class rysik { public static void main(string[] args) { Frame okno = new Frame("Okno"); okno.add( new Plansza() ); okno.setsize(100,100); okno.setvisible(true); } } class Plansza extends Canvas { Plansza() { System.out.println(""+this.getSize().width); } public void paint(graphics g) { g.drawline(10,10,20,30); } }

AWT abstract windowing toolkit pierwsza biblioteka okienkowa Javy; dostępna we wszystkich wersjach Javy; mało przyjazne API; brak wielu poŝytecznych kontrolek; pakiet java.awt

SWT (Standard Widget Toolkit) nie dołączane standardowo do Javy, naleŝy dołączyć do programu; bardzo wydajna oferuje bogata paletę komponentów korzysta z komponentów systemowych wszędzie, gdzie to moŝliwe.

Swing nowsza wersja biblioteki okienkowej, dostępna od wersji 1.2 języka Java. jest wygodny, dobrze przemyślany interfejs i szeroka gama dostępnych komponentów. nie ma jej w starszych wersjach Javy, nie jest ona szczególnie wydajna. pakiet javax.swing

Nazewnictwo Dla łatwiejszego odróŝniania klas Swing od klas AWT w bibliotece Swing wprowadzono następująca konwencje nazewnicza: nazwy wszystkich klas biblioteki Swing zaczynają się od litery J, po czym następuje właściwa nazwa komponentu, np. JButton oznacza przycisk (ang. button).

MainFrameAWT import java.awt.*; import java.awt.event.*; public class MainFrameAWT extends Frame { public MainFrameAWT() { super("aplikacja AWT"); init(); show(); } private void init() { setlayout(null); setsize(400, 300); Label label = new Label("Aplikacja AWT"); label.setbounds(10, 20, 100, 25); add(label); addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); } }); } } public class AppAWT { } public static void main(string[] args) { MainFrameAWT f = new MainFrameAWT(); }

Swing import java.awt.event.*; import javax.swing.*; public class MainFrameSwing extends JFrame { public MainFrameSwing() { super("aplikacja Swing"); init(); show(); } private void init() { setsize(400, 300); JPanel panel = (JPanel) getcontentpane(); panel.setlayout(null); JLabel label = new JLabel("Aplikacja Swing"); label.setbounds(10, 10, 100, 25); panel.add(label); addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); } }); } } public class appswing { public static void main(string[] args) { MainFrameSwing f = new MainFrameSwing(); } }

Podstawowe elementy graficznego interfejsu uŝytkownika (GUI) Komponenty Kontenery Przyciski Etykiety Listy Pola edycyjne okna

Etapy tworzenia GUI Główne okno programu Komponent Umieszczanie komponentu na oknie Wymiana danych komponent/program

javax.swing / java.awt 1. import java.awt.* 2. extends JFrame 3. show(), setsize() import javax.swing.*; class start_gui extends JFrame { } class start_program { public static void main(string[] s){ start_gui okienko = new start_gui(); okienko.setsize(500,500); okienko.show(); } Aplikacja okienkowa musi posiadać swoje dziedzicząca po klasie java.awt.window. okno. Okno jest klasa Jednak w aplikacjach Swing będziemy najczęściej dziedziczyć po klasie javax.swing.jframe, która jest jej klasa pochodna.

Metody klasy JFrame JFrame() konstruktor domyślny tworzy nowe okienko, JFrame(String tytul) konstruktor tworzący okienko z ustalonym napisem na belce tytułowej, Container getcontentpane() zwraca panel zawartości, w którym naleŝy umieszczać wszystkie komponenty, które maja się znaleźć w oknie aplikacji, void setcontentpane (Container cp) ustawia panel zawartości dla aplikacji,

void setdefaultcloseoperation(int operation) ustawia operacje wykonywana po zamknięciu aplikacji przez uŝytkownika, moŝliwe wartości, to: JFrame.DO NOTHING ON CLOSE nic nie robi (nie zamyka okna) musimy sami obsłuŝyć zdarzenie związane z zamykaniem aplikacji, JFrame.HIDE ON CLOSE ukrywa okno (nie zamyka go), jest to wartość domyślna, jeśli jej nie zmienimy tak własnie zareaguje program na próbę zamknięcia przez uŝytkownika, JFrame.DISPOSE ON CLOSE zamyka okno i zwalnia jego zasoby (zalecane dla okien potomnych), JFrame.EXIT ON CLOSE zamyka program za pomocą metody System.exit jest to zalecana reakcja dla okna głównego aplikacji,

void setjmenubar(jmenubar menubar) ustawia główne menu dla okna void setlayout(layoutmanager manager) ustawia menedŝera układu dla okna domyślnie uŝyty jest menedŝer java.awt.borderlayout, void addwindowlistener(windowlistener l) dodaje odbiorcę zdarzen zwiazanych z oknem (takich jak na przykład zamkniecie okna). void setbounds(int x, int y, int width, int height) - ustawia pozycje i wymiary okna (po kolei: odległość od lewej krawędzi ekranu, odległość od góry ekranu, wysokość i szerokość; wszystkie odległosci podane w pikselach), void setvisible(boolean widoczne) ustawia widzialność okienka.

zalecenia metoda main, która stworzy obiekt okna i wyświetli go. Metodę umieszczamy w klasie głównego okna, operacje związane z wyglądem okna umieszczamy w konstruktorze klasy tego okna.

Komponenty w oknie aplikacji Layout managers menadŝer rozmieszczenia Typy rozmieszczenia: Border Layout, Flow Layout, Box Layout, Grid Layout, 1. Dla kontenera określ sposób rozmieszczania elementów, 2. Dodaj komponenty dodaje do okna programu za pomocą utworzonego menedŝera (metoda kontenera add(...)).

Obiekty klasy JFrame składają się z czterech płaszczyzn (ang. panes), płaszczyzna nazwana ContentPane jest kontenerem, zawiera elementy graficznego interfejsu uŝytkownika. JFrame frame = new JFrame(); Container cp = frame.getcontentpane(); cp.add( );

uŝycie menedŝera BorderLayout new BorderLayout() domyślny dla JFrame Rozmieszczanie elementów: pięć regionów, identyfikowanych etykietami "North",...,""South", "Center", dodawanie elementów: add(nazwa_komponentu, region) Wypełnianie regionów: całkowite Zmiana rozmiarów okna: cały przyrost powierzchni zajmowany przez element "Center"

public static void main (String[] args){ new layout_start(); } 1. public layooy_start() { 2. JFrame frame = new JFrame(); 3. Container cp = frame.getcontentpane(); 4. cp.setlayout(new BorderLayout()); 5. int i=1; 6. JButton b = new JButton("Przycisk nr: " + (i)); 7. JButton b1 = new JButton("Przycisk nr: " + (i+1)); 8. cp.add(b,"center"); 9. cp.add(b1,"north"); 10.} //"North","South","East","West","Center"

frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setsize(420,420); frame.setvisible(true);

uŝycie menedŝera FlowLayout domyślny dla kontenera typu JPanel new FlowLayout() Rozmieszczanie elementów: umieszczane kolejno, jeden za drugim dodawanie elementów: add(nazwa_komponentu) Wypełnianie regionów: domyslnym komponentu Zmiana rozmiarów okna: zmieniaja rozmiarow okreslone rozmiarem komponenty nie

cp.setlayout(new FlowLayout(FlowLayout.RIGHT,20,200));

uŝycie menedŝera GridLayout new GridLayout(liczba_wierszy,liczba_kolumn) Rozmieszczanie elementów: umieszczane w kolejnych komórkach hipotetycznej siatki o strukturze okreslonej w konstruktorze. Dodawanie elementu: add(nazwa_komponentu) Wypełnianie regionów: Zmiana rozmiarów okna: komponentów maksymalne moŝliwe równomierne dla wszystkich

cp.setlayout(new GridLayout(2,2));

b.setbackground(new Color(250,250,250));

uŝycie menedŝera GridBagLayout Z kaŝdym komponentem jest kojarzony obiekt o nazwie GridBagConstraints, opisujący wszystkie szczegóły jego połoŝenia i zachowania podczas zmian rozmiaru okna. 1. połoŝenie elementu gridx, gridy (np. gridx=2) 2. rozmiar elementu - gridwidth, gridheight 3. zmienność rozmiaru elementu - fill (np. GridBagConstraints.HORIZONTAL) 4. zmiennosć rozmiaru komórki hipotetycznej siatki - weightx, weighty (np. weightx=100) 5. usytuowanie elementu w komórce siatki - anchor (np. GridBagConstraints.NORTH)

Manager GridBagLayout Klasa GridBagLayout, podobnie jak klasa GridLayout pozwala na układanie komponentów w tabelce. Ma ona jednak wieksze mozliwosci: ustalanie wielkości komórek łaczenie ich.

przykład Container cp = getcontentpane(); JButton b= new JButton( przycisk"); GridBagLayout gbl=new GridBagLayout(); cp.setlayout(gbl); GridBagConstraints gbc=new GridBagConstraints(); GridBagConstraints gbc=new GridBagConstraints(); gbc.gridx=0; gbc.gridy=0; gbc.gridwidth=2; gbc.gridheight=1; gbc.weightx=100; gbc.weighty=100; gbc.fill=gridbagconstraints.none; gbc.anchor=gridbagconstraints.northwest; gbl.setconstraints(b1,gbc); cp.add(b1);

Manager CardLayout Układa dodawane komponenty na stosie. Pierwszy umieszczony w panelu komponent zostanie umieszczony na wierzchu, pozostałe poniŝej niego (będą niewidoczne). przełączanie się między komponentami moŝliwie jest za pomocą metod klasy CardLayout:

klasy CardLayout void first(container parent) przewija na pierwszy komponent, void last(container parent) przewija na ostatni komponent, void next(container parent) przewija na nastepny komponent, void prevoius(container parent) przewija na poprzedni komponent, void show(container parent, String name) przewija na komponent o podanej nazwie.

bez menedŝera rozmieszczenia Elementy mogą być umieszczone w oknie programu bezpośrednio, poprzez wskazanie ich połoŝenia i rozmiaru. setbounds(...) - przyjmuje jako parametry połoŝenie (wsp. x i y w pikselach) i rozmiar (szerokosć, wysokosć): JButton b1= new JButton("button 2"); Container cp = getcontentpane(); cp.setlayout(null); b1.setbounds(10,10,100,40);

import java.awt.*; import javax.swing.*; public class bezy { public static void main(string[] args) { new bezy(); } public bezy(){ JButton b1= new JButton("button 23"); JButton b2= new JButton("button 233"); JFrame frame = new JFrame(); Container cp = frame.getcontentpane(); cp.setlayout(null); b1.setbounds(10,10,100,40); b2.setbounds(100,100,100,40); cp.add(b1); cp.add(b2); frame.pack(); frame.setsize(400, 400); frame.setvisible(true); } }

uŝycie menedŝera BoxLayout new BoxLayout(nazwa_kontenera, orientacja) orientacja - BoxLayout.X_AXIS, BoxLayout.Y_AXIS Rozmieszczanie elementów: Dodawanie elementu: kolejno, pionowo lub poziomo. add(nazwa_komponentu) Wypełnianie regionów: połoŝenie określane dla kaŝdego komponentu indywidualnie - setalignment(połoŝenie) Component.CENTER_ALIGNMENT, Component.LEFT_ALIGNMENT,... Zmiana rozmiarów okna: zmiana rozmiaru kontrolowana indywidualnie dla komponentu - setmaximumsize(new Dimension(w,h)) Przerwy między elementami: przerwy o stałym: Box.createRigidArea(new Dimension(w,h)) zmiennym rozmiarze: Box.createVerticalGlue(), Box.createHorizontalGlue()

Panele Panele to kolejny typ "kontenerów" Javy. MoŜliwe jest ich zagnieŝdŝanie; MoŜliwość umieszczania na nich grafiki; JPanel panel1=new JPanel(); panel1.setpreferredsize(new Dimension(460,468)); panel1.setbackground(white); panel1.setlayout(new BorderLayout());... add(panel1);

Przykład

1. Dodanie bibliotek import java.awt.*; import javax.swing.*; public class rozmieszczenie extends JFrame { static final int col_num=5; public static void main(string args[]) {

Przygotowanie definicji layout ow -2 String rodzaj_layout[]={"border Layout", "Flow layout", "Flow RIGHT/LEFT", "GridLayout (n,m) }; LayoutManager Menadzer_loyaout[]={ new BorderLayout(), new FlowLayout(), new FlowLayout(FlowLayout.RIGHT,20,20), new GridLayout(col_num,col_num), };

Cd. - 3 String uklad[]= {"West","North","East","South", "Center"}; Color kolory[]= { new Color(200,255,155), new Color(100,150,100), new Color(181,215,165), new Color(155,155,160), };

Przygotowanie okna - 4 //mamy: rodzaje layout ów string //uklad string //kolory Color //menadzer layout ów LayoutManager JFrame frame=new JFrame("ZACZYNAMY"); frame.setlayout(new GridLayout(3,2));

for(int i=0;i<rodzaj_layout.length;i++) { Panel p=new Panel(); p.setlayout(menadzer_loyaout[i]); for(int j=0;j<col_num;j++) { Button b=new Button("Przycisk nr: "+(j+1)); if(i==0)p.add(b,uklad[k++]); else p.add(b); }

dalej w pętli for Panel p1=new Panel(); p1.setlayout(new BorderLayout()); Label lab=new Label(rodzaj_layout[i]+":"); lab.setfont(new Font("Doalog",Font.BOLD,26)); lab.setbackground(kolory[i]); p1.add(lab,"north"); p1.add(p,"center"); frame.add(p1);

kończymy frame.setdefaultcloseoperation(frame.exit_on_close); frame.pack(); frame.setvisible(true);

Zdarzenia i obsługa zdarzeń Zdarzenie niskiego poziomu to wciśnięcie klawisza klawiatury lub kliknięcie przycisku myszki. KeyEvent, MouseEvent, MouseMotionEvent

JeŜeli jesteśmy zainteresowani reagowaniem na wystąpienie konkretnego zdarzenia, musimy w kodzie programu zidentyfikowaćźródło zdarzenia, Dla akcji uŝytkownika polegających na wciśnięciu przycisku programowego, źródłem jest przycisk (obiekt typu JButton) Add???Listener(???) Źródło zdarzenia Kod obsługi umieszczony w obiekcie???

zdarzeniem generowanym przez obiekty typu 'przycisk' są zdarzenia typu 'akcja addactionlistener(.) dla zdarzeń typu akcja, metodą uruchamianą przez JVM jest metoda public void actionperformed(actionevent e) { } informacja o implementacji odpowiedniego interfejsu programowego java.awt.event.

przykład public class przyklad implements ActionListener{ public void actionperformed(actionevent e){ String tekst=e.getactioncommand(); System.out.println(tekst); } przykład(){ JButton b = new JButton( przycisk ); b.addactionlistener(this); }

import java.awt.event.*; import javax.swing.*; class obrazek extends JFrame implements ActionListener{ int count=0; JButton b; obrazek(){ b = new JButton( licznik: 0"); getcontentpane().add(b); b.addactionlistener(this); pack(); } public void actionperformed(actionevent e){ count++; b.settext( licznik:"+count); } public static void main(string[] args) { obrazek okno = new obrazek(); okno.show(); } }

pola tekstowe pola słuŝące do wprowadzania tekstu klasa JTextField, 2 najciekawsze metody : gettext(), settext. RóŜne odmiany konstruktorów umoŝliwiają podanie wielu parametrów w trakcie powstawania obiektu. Przyciśnięcie klawisza ENTER klawiatury powoduje generację zdarzenia typu 'akcja', reakcja identyczna jak dla przycisków programowych.