Programowanie obiektowe

Podobne dokumenty
Języki Programowania II Wykład 7. Java Swing

SWING. dr Jarosław Skaruz

Java - interfejs graficzny

Kontenery i komponenty graficzne

Podstawy Języka Java

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

Programowanie zdarzeniowe

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

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

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

Programowanie obiektowe

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

Programowanie graficznych interfejsów użytkownika

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

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

Programowanie obiektowe

Interfejs graczny w Javie.

Java biblioteka Swing

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

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

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

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

Tworzenie elementów graficznych

Programowanie w języku Java WYKŁAD

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

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

Programowanie zdarzeniowe

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

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

GUI - projektowanie interfejsów cz. II

Podstawy Swing. Tomasz Borzyszkowski

LABORATORIUM 7 Cel: 1_1

Tworzenie i obsługa graficznego interfejsu uŝytkownika

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

Programowanie Obiektowe Java

Obsługa zdarzeń. Wykład 4

Programowanie zdarzeniowe

Graphic User Interfaces pakiet Swing

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

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

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

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

Aplikacja wielowątkowa prosty komunikator

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.

Architektura interfejsu użytkownika

Programowanie Obiektowe GUI

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

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

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

Aplikacje w Javie wykład 12 Programowanie GUI

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

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

Programowanie Obiektowe Java

Języki i metody programowania Java Obsługa zdarzeń - przykłady

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

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Ćwiczenia 9 - Swing - część 1

Aplikacja wielow tkowa prosty komunikator

Programowanie graficznych interfejsów uŝytkownika

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

Podstawowe informacje o apletach

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

Kontynuacja wprowadzenia do SWING. Przykłady implementacji wybranych komponentów

Aplikacje w środowisku Java

Dokumentacja do API Javy.

PROGRAMOWANIE APLIKACJI MULTIMEDIALNYCH

Iteracyjno-rozwojowy cykl oprogramowania 4

Zaznaczanie komórek. Zaznaczenie pojedynczej komórki polega na kliknięciu na niej LPM

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

Przykładowe roz wiązanie:

Programowanie w języku Java

Wykład 12: Obsługa Zdarzeń

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

Zaawansowane aplikacje WWW - laboratorium

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Formatowanie komórek

Wykład 3: Projektowanie graficznych interfejsów użytkownika w Java

Visual Basic for Applications. Formatki tworzenie,

9. Swing wprowadzenie

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

Aplikacje w Javie wykład 12 Programowanie GUI

Scenariusz Lekcji. Część organizacyjna:

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

Tworzenie aplikacji graficznych SWT i JFace

1 Atrybuty i metody klasowe

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Czcionki bezszeryfowe

Edytor tekstu OpenOffice Writer Podstawy

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

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

Edytor tekstu MS Word podstawy

Programowanie Obiektowe Java

Java Podstawy. Michał Bereta

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

JAVA CZ.2 Programowanie obiektowe. poniedziałek, 20 kwietnia 2009

nazwisko_.setfont(new Font("Times New Roman", Font.BOLD, 12));

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Języki i metody programowania Java Lab6 Budowa interfejsu graficznego użytkownika (GUI Graphical User Interfaces) z wykorzystaniem pakietu Swing

Programowanie w Javie

Transkrypt:

Przygotował: Jacek Sroka 1 Programowanie obiektowe Swing

Przygotował: Jacek Sroka 2 GUI w Javie Abstract Window Toolkit (AWT) podstawowy zbiór komponentów opartych na zarządcy okien wspólny mianownik funkcjonalności ze wszystkich platform rozbudowany model obsługi zdarzeń klasy pomocnicze m.in. kształty, kolory i fonty zarządcy układu obsługa schowka

Przygotował: Jacek Sroka 3 GUI w Javie Swing to co w AWT plus Javowa implementacja komponentów z AWT rozbudowany zestaw komponentów zaimplementowanych w Javie tylko komponenty najwyższego poziomu są oparte na zarządcy okien ta sama funkcjonalność na wszystkich platformach przełączalny wygląd i zachowanie (pluggable look and feel) dość dobra ale nie idealna symulacja wyglądu zarządcy okien (nie korzysta z akceleracji)

Przygotował: Jacek Sroka 4 GUI w Javie c.d. Standard Widget Toolkit (SWT) zapoczątkowany przez IBMa, rozwijany w ramach platformy Eclipse opiera się na zarządcy okien tak ja AWT, ale nie ogranicza funkcjonalności gorsza przenośność aplikacji (WORE vs WOTE)

Przygotował: Jacek Sroka 5 import javax.swing.*; Przykład public class WitajSwiecie { private static void utwórzgui() { //tworzenie nowego okna JFrame frame = new JFrame("Okno WitajSwiecie"); frame.setdefaultcloseoperation(jframe.exit_on_close); //dodawanie etykiety z przywitaniem JLabel label = new JLabel("Witaj świecie!"); frame.add(label); } //ustalanie wymiarów i wyświetlanie okna //frame.pack(); //względem komponentów frame.setsize(300,150); frame.setvisible(true); } public static void main(string[] args) { //aby uniknąć zakleszczeń tworzenie GUI //zlecamy do wątku obsługi zdarzeń SwingUtilities.invokeLater(new Runnable() { public void run() { utwórzgui(); } }); }

Przygotował: Jacek Sroka 6 Podstawowe komponenty JLabel wyświetla tekst lub obrazek get/settext() get/seticon() get/sethorizontalalignment() get/setverticalalignment() get/setdisplayedmnemonic() mnemonic to podkreślona litera get/setlabelfor() komponent do którego zostanie przeniesiony focus po wybraniu Alt+mnemonic

Przygotował: Jacek Sroka 7 Podstawowe komponenty JButton podobnie jak etykieta (i inne komponenty) posiada get/settext(), get/seticon(), get/sethorizontalalignment(), get/setverticalalignment(), get/setdisplayedmnenomic() przycisk może zmieniać wygląd w zależności od swojego stanu get/setdisabledicon() get/setdisabledselectedicon() get/seticon() get/setpressedicon() get/setrollovericon() get/setrolloverselectedicon() get/setselectedicon() akcję dowiązujemy przy pomocy zdarzeń

Przygotował: Jacek Sroka 8 Podstawowe komponenty JTextField get/settext() JFrame kontener na inne komponenty łącznik do systemu operacyjnego (systemu okien) get/settitle() tytuł okienka get/setstate() minimalizacja/maksymalizacja is/setvisible() widoczność na ekranie get/setlocation() umiejscowienie na ekranie get/setsize() rozmiar add() dodanie komponentu

Przygotował: Jacek Sroka 9 Drugi przykład import javax.swing.*; public class AWitajŚwiecie extends JFrame { JLabel jlabel; JTextField jtextfield; JButton jbutton; public AWitajŚwiecie() { super(); this.setsize(300, 200); this.getcontentpane().setlayout(null); this.add(getjlabel(), null); this.add(getjtextfield(), null); this.add(getjbutton(), null); this.settitle("witajswiecie"); this.setvisible(true); }

Przygotował: Jacek Sroka 10 private javax.swing.jlabel getjlabel() { if(jlabel == null) { jlabel = new javax.swing.jlabel(); jlabel.setbounds(34, 49, 53, 18); jlabel.settext("imię:"); } return jlabel; } private javax.swing.jtextfield getjtextfield() { if(jtextfield == null) { jtextfield = new javax.swing.jtextfield(); jtextfield.setbounds(96, 49, 160, 20); } return jtextfield; } private javax.swing.jbutton getjbutton() { if(jbutton == null) { jbutton = new javax.swing.jbutton(); jbutton.setbounds(103, 110, 71, 27); jbutton.settext("ok"); } return jbutton; } public static void main(string[] args) { new AWitajŚwiecie(); }

Przygotował: Jacek Sroka 11 Problemy Bezwzględne rozmiary i współrzędne jak to będzie wyglądać na innych platformach? Jak zakończyć aplikację? DO_NOTHING_ON_CLOSE HIDE_ON_CLOSE (domyślne dla JDialog i JFrame) ukrywa okno DISPOSE_ON_CLOSE (domyślne dla JInternalFrame) ukrywa i zwalnia zasoby; jeżeli to było ostatnie okno to VM może zakończyć działanie EXIT_ON_CLOSE kończy aplikację przy pomocy System.exit(0) Czy rozszerzać JFrame i pamiętać komponenty jako atrybuty?

Przygotował: Jacek Sroka 12 Zarządcy układu BorderLayout używany domyślnie przez główne komponenty (JApplet, JDialog i JFrame) zmiana metodą setlayout(layoutmanager) rejony: prawo, lewo, góra, dół, środek (domyślnie) dodanie nowego komponentu do rejonu już posiadającego zawartość spowoduje jej podmianę FlowLayout układa komponenty od lewej do prawej dozwala komponentom na preferowany rozmiar, nawet jak nie będą przez to widoczne w całości

Przygotował: Jacek Sroka 13 Zarządcy układu c.d. GridLayout komponenty umieszczane są w komórkach siatki wszystkie komponenty mają taki sam rozmiar I wiele innych... BoxLayout wiersz lub kolumna (można zagnieżdżać) GridBagLayout duże możliwości, skomplikowany SpringLayout rozmieszczenie wyznaczone przez więzy (sprężyny z minimalną, maksymalną i optymalną długością) CardLayout przełączalne karty

Przygotował: Jacek Sroka 14 Zarządcy układu c.d.

Przygotował: Jacek Sroka 15 Jeszcze trochę komponentów JComboBox pozwala wybrać max 1 element additem() dodaje element do grupy get/setselectedindex() manipuluje stanem get/setselecteditem() zwraca/ustawia wybrany element removeallitems() usuwa wszystkie elementy removeitem() usuwa konkretny element JPasswordField podobny do JTextField get/setechochar() wyświetlany znak gettext() zwraca napis (przy heap dump teoretycznie można go odczytać) getpassword() zwraca char[]

Przygotował: Jacek Sroka 16 Jeszcze trochę komponentów c.d. JCheckBox i JRadioButton JRadioButton daje wykluczający się wybór add() dodaje checkbox lub przycisk do grupy getelements() zwraca wszystkie komponenty grupy do iteracji JOptionPane gotowiec do wyskakujących okienek

Przygotował: Jacek Sroka 17 Jeszcze trochę komponentów c.d. JMenu/JMenuItem/JMenuBar przy pomocy setjmenubar() ustawia się JMenuBar dla ramki JMenu zawiera JMenuItem lub inne JMenu JMenuItem się wybiera dla JMenuItem można ustawić skrót dla JMenu i JMenuItem można ustawiać mnemoniki Wspólne metody JMenuItem oraz jego podklasy JMenu: get/setaccelerator() ustawia skrót postaci Ctrl+klawisz get/settext() tekst wyświetlany w menu get/seticon() ikona wyświetlana w menu Metody JMenu: add() dodaje element lub podmenu

Przygotował: Jacek Sroka 18 Jeszcze trochę komponentów c.d. JSlider wygodne pobieranie wartości całkowitych z zadanego zakresu get/setminimum() get/setmaximum() get/setorientation() pion lub poziom get/setvalue() JSpinner umożliwia wybór z ciągu wartości, np. liczb, dat, kolorów (trochę podobny do JSlider i JComboBox) get/setvalue() początkowa wartość jako liczba całkowita getnextvalue() wartość po kliknięciu strzałki w górę getprevioudvalue() wartość po kliknięciu strzałki w dół

Przygotował: Jacek Sroka 19 Jeszcze trochę komponentów c.d. JToolBar pasek narzędziowy, może pływać działa jak paleta na inne komponenty is/setfloatable() JToolTip podpisy do wszystkich innych komponentów sami nie tworzymy tylko ustawiamy metodą settooltip()

Przygotował: Jacek Sroka 20 Jeszcze trochę komponentów c.d. JTextArea wieloliniowe pole tekstowe is/setlinewrap() czy załamywać linie is/setwrapstyleword() czy załamywać słowa JScrollPane przykład Dekoratora gethorizontalscrollbar() zwraca zawarty obiekty JScrollBar getverticalscrollbar() analogicznie get/sethorizontalscrollbarpolicy() Always, Never lub Needed get/setverticalscrollbarpolicy() analogicznie

Przygotował: Jacek Sroka 21 Jeszcze trochę komponentów c.d. JList podobna do JComboBox, ale umożliwia wybór wielu wartości najlepiej opakowywać w JScrollPane get/setselectedindex() indeks wiersza lub int[] get/setselectionmode() tryb wyboru setlistdata() dane dla listy aet/setselectedvalue() zaznaczony obiekt

Przygotował: Jacek Sroka 22 Jeszcze trochę komponentów c.d. JTable JTree

Przygotował: Jacek Sroka 23 Obsługa zdarzeń Wzorzec Obserwator (ang. Observer) Wydawca-Prenumerator (ang. Publish-Subscribe) Delegowanie obsługi zdarzeń (ang. Delegation Event Model) Konwencja nazewnicza addactionlistener(actionlistener) i removeactionlistener(actionlistener) actionperformed(actionevent) Kod obsługi zdarzeń wykonywany jest przez wątek koordynujący zdarzenia długotrwałe operacje zamulają interfejs można używać SwingUtilities.invokeLater() uwaga na zakleszczenia przy przebudowywaniu interfejsu z innego wątku

Przygotował: Jacek Sroka 24 public class ZliczanieKliknięć extends JFrame { Integer licznikkliknięć = 0; JLabel etykieta; class ZwiększanieLicznika implements ActionListener { public void actionperformed(actionevent e) { //obiekt klasy wewnętrznej ma dostęp do skład. obiektu klasy otaczającej licznikkliknięć++; etykieta.settext("dotychczas kliknąłeś " + licznikkliknięć + (licznikkliknięć == 1? " raz" : " razy")); } } ZliczanieKliknięć() { super("okno ZliczanieKliknięć"); setdefaultcloseoperation(jframe.exit_on_close); JPanel panel = new JPanel(); panel.setlayout(new GridLayout(3, 0)); JButton przycisk = new JButton("Kliknij"); przycisk.addactionlistener(new ZwiększanieLicznika()); panel.add(przycisk); etykieta = new JLabel("Jeszcze nie kliknięto ani razu"); panel.add(new JPanel());//pusty panel zapewnia odstęp panel.add(etykieta); //puste obramowanie odsuwa komponenty od krawędzi panel.setborder(borderfactory.createemptyborder(30,60,10,60)); add(panel); //...

Przygotował: Jacek Sroka 25 Najważniejsze rodzaje zdarzeń ActionListener kliknięcie przycisku, wybór pozycji z menu, zaakceptowanie wartości w polu tekstowym actionperformed(actionevent e) KeyListener obsługa klawiatury: wciśnięcie, puszczenie i kliknięcie klawisza istnieje klasa adapter KeyAdapter keypressed(keyevent e) keyreleased(keyevent e) keytyped(keyevent e)

Przygotował: Jacek Sroka 26 Najważniejsze rodzaje zdarzeń MouseListener obsługa myszki: wciśnięcie przycisku, puszczenie przycisku, kliknięcie, najechanie i opuszczenie istnieje klasa adapter MouseMotionListener mouseclicked(mouseevent e) mouseentered(mouseevent e) mouseexited(mouseevent e) mousepressed(mouseevent e) mousereleased(mouseevent e) MouseMotionListener wykrywanie ruchu kursora istnieje klasa adapter MouseMotionAdapter mousedragged(mouseevent e) mousemoved(mouseevent e)

Przygotował: Jacek Sroka 27 Najważniejsze rodzaje zdarzeń TextListener dotyczy komponentów rozszerzających JTextComponent (np. JTextArea i JTextField); zachodzi gdy zmienił się tekst textvaluechanged(textevent e) WindowListener aktywacja/dezaktywacja, minimalizacja/maksymalizacja, itp. istnieje klasa adapter WindowAdapter windowactivated(windowevent e) windowclosed(windowevent e) windowclosing(windowevent e) windowdeactivated(windowevent e) windowdeiconified(windowevent e) windowiconified(windowevent e) windowopened(windowevent e)

Przygotował: Jacek Sroka 28 Modele Zamiast żmudnie zarządzać danymi niektórych komponentów wygodniej podłączyć do nich model JComboBox jakie są możliwości wyboru i ile ich jest JSpinner co wyświetlić i jakie są poprzednie i wcześniejsze możliwości JList jaki tekst opisuje poszczególne możliwości wyboru JTable liczba kolumn i wierszy, ich etykiety, klasy kolumn, tekst każdej komórki JTree struktura drzewa

Przygotował: Jacek Sroka 29 Modele przykład super("okno ComboBoxModel"); setdefaultcloseoperation(jframe.exit_on_close); String[] data = {"Ala", "Ola", "Ela", "Ula"}; MyComboModel model = new MyComboModel(java.util.Arrays.asList(data)); JComboBox cb1 = new JComboBox(); JComboBox cb2 = new JComboBox(); cb1.setmodel(model); cb2.setmodel(model); setlayout(new FlowLayout()); add(cb1); add(cb2); setsize(300, 150); setvisible(true);

Przygotował: Jacek Sroka 30 Modele przykład c.d. class MyComboModel implements ComboBoxModel { private List data = new ArrayList(); private int selected = 0; public MyComboModel(List list) { data = list; } public void setselecteditem(object o) { selected = data.indexof(o); } public Object getselecteditem() { return data.get(selected); } public int getsize() { return data.size(); } public Object getelementat(int i) { return data.get(i); } public void addlistdatalistener(listdatalistener l) { //rejestruje listenery zainteresowane zmianami modelu } } public void removelistdatalistener(listdatalistener l) { //usuwa listenery zainteresowane zmianami modelu }

Przygotował: Jacek Sroka 31 Wygląd i zachowanie Standardowe podklasy LookAndFeel javax.swing.plaf.metal.metallookandfeel domyślne międzyplatformowe wygląd i zachowanie Javy; można go używać na każdej platformie, com.sun.java.swing.plaf.windows.windowslookandfeel wygląd i zachowanie symulujące te znane z systemu Windows; obecnie można ich używać tylko pod systemem Windows, com.sun.java.swing.plaf.motif.motiflookandfeel wygląd i zachowanie CDE/Motif; domyślne na systemach firmy SUN; można go używać na każdej platformie, com.sun.java.swing.plaf.gtk.gtklookandfeel wygląd i zachowanie GTK+ (nie jest dostępny w wszystkich wersjach JRE). wiele innych na http://www.javootoo.com/

Przygotował: Jacek Sroka 32 Przełączanie wyglądu i zachowania w trakcie startu aplikacji java -Dswing.defaultlaf= com.sun.java.swing.plaf.gtk.gtklookandfeel MyApp jak nie doszło jeszcze do statycznej inicjalizacji żadnej klasy Swinga UIManager.setLookAndFeel(String) w trakcie działania aplikacji SwingUtilities.updateComponentTreeUI(Component) dwie przydatne metody: UIManager.getSystemLookAndFeelClassName() UIManager.getCrossPlatformLookAndFeelClassName()

Przygotował: Jacek Sroka 33 Listwa górna i ramka okna Niektóre wyglądy potrafią same rysować listwę górną i ramkę okna, np. javax.swing.plaf.metal.metallookandfeel zazwyczaj jest dostarczana przez menadżera okien JFrame.setDefaultLookAndFeelDecorated(true)

Przygotował: Jacek Sroka 34 Co dalej Ćwiczenia z ważniaka Bardzo dobre przewodniki na http://java.sun.com/docs/books/tutorial/ Projekt Matisse http://www.netbeans.org/kb/trails/matisse.html