Doskonalsze i nowe komponenty GUI

Podobne dokumenty
Java - interfejs graficzny

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

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

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

SWING. dr Jarosław Skaruz

Kontenery i komponenty graficzne

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

Wprowadzenie do programowania współbieżnego. Grafika, Proste Animacje

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

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

Dawid Gierszewski Adam Hanasko

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

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

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

Tworzenie elementów graficznych

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

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie graficznych interfejsów użytkownika

OpenPoland.net API Documentation

Aplikacja wielow tkowa prosty komunikator

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

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

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

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

Bartosz Jachnik - Kino

Podstawy Języka Java

Helena Boguta, klasa 8W, rok szkolny 2018/2019

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

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

Aplikacje RMI Lab4

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);

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

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

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

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

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Operatory. Składnia. Typy proste. Znaki specjalne

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

Zarządzanie sieciami telekomunikacyjnymi

Programowanie w języku Java dla urządzeń BlackBerry z pomocą Blackberry JDE Plugin for Eclipse

Programowanie obiektowe

Programowanie obiektowe

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

Przetwarzanie równoległe i współbieżne

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Programowanie komponentowe

Programowanie obiektowe

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

Programowanie zdarzeniowe

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Programowanie Obiektowe GUI

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

1. Co można powiedzieć o poniższym kodzie?

Komponenty sterowane komunikatami

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

Programowanie Obiektowe Java

Machine Learning for Data Science (CS4786) Lecture11. Random Projections & Canonical Correlation Analysis

Dokumentacja do API Javy.

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

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

Multimedia JAVA. Historia

Programowanie obiektowe

Programowanie Komputerów

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

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Programowanie zdarzeniowe

STWORZENIE PRZYKŁADOWEJ

1. Zakładanie projektu Katalog typu Java Class Library do przechowywania obiektowego modelu danych projekt należy do warstwy biznesowej

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Kurs programowania. Wykład 8. Wojciech Macyna

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

Programowanie obiektowe zastosowanie języka Java SE

Swing ćwiczenia 2 opis

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Programowanie w języku Java

1 Atrybuty i metody klasowe

Systemy wbudowane. Poziomy abstrakcji projektowania systemów HW/SW. Wykład 9: SystemC modelowanie na różnych poziomach abstrakcji

ARNOLD. EDUKACJA KULTURYSTY (POLSKA WERSJA JEZYKOWA) BY DOUGLAS KENT HALL

Programowanie obiektowe

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis,

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Remote Method Invocation 17 listopada 2010

Iteracyjno-rozwojowy cykl oprogramowania 4

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Podejście obiektowe do budowy systemów rozproszonych

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Transkrypt:

JFC (Swing)

Doskonalsze i nowe komponenty GUI

Kontenery najwyŝszego poziomu Aby pojawić się na ekranie kaŝdy komponent musi być częścią pewnej hierarchii zawierania (containment hierarchy). Hierarchia zawierania ma strukturę drzewiastą, której korzeniem jest jeden z kontenerów najwyŝszego poziomu: JFrame, JDialog, lub JApplet

JFrame

Alternatywnie JPanel contentpane = new JPanel(new BorderLayout()); contentpane.setborder(someborder); contentpane.add(somecomponent, BorderLayout.CENTER); contentpane.add(anothercomponent, BorderLayout.PAGE_END); toplevelcontainer.setcontentpane(conten tpane);

Look and feel Java look and feel CDE/Motif look and feel Windows look and feel

Import pakietu & look import javax.swing.*;... try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLoo kandfeelclassname()); catch (Exception e) {...//Create and show the GUI...

JComponent Wyłączjąc kontenery najwyŝszego poziomu wszystkie komponenty Swing'u (J...) dziedziczą funkcjonalność po klasie JComponent, która z kolei po klasach Container i Component, stąd przydatna jest znajomość wielu uŝytecznych metod oferowanych w tej klasie:

settooltip b1.settooltiptext("click this button to disable the middle button.");

Painting and Borders JPanel pane = new JPanel(); pane.setborder(borderfactory.createlineborder( Color.black));

The Swing Painting Methods paintcomponent The main method for painting. By default, it first paints the background if the component is opaque. Then it performs any custom painting. paintborder Tells the component's border (if any) to paint. Do not invoke or override this method. paintchildren Tells any components contained by this component to paint themselves. Do not invoke or override this method.

System współrzędnych protected void paintcomponent(graphics g) {... Insets insets = getinsets(); int currentwidth = getwidth() - insets.left insets.right; int currentheight = getheight() - insets.top insets.bottom;....../* First painting occurs at (x,y), where x is at least insets.left, and y is at least insets.top. */...

Graphics2D if (isopaque()) { //paint background g.setcolor(getbackground()); g.fillrect(0, 0, getwidth(), getheight()); //Example of copying the Graphics object Graphics2D g2d = (Graphics2D)g.create(); //copy g g2d.translate(x, y);... g2d.dispose(); //release the copy's resources

Swing i wątki Initial threads, the threads that execute initial application code. The event dispatch thread, where all eventhandling code is executed. Most code that interacts with the Swing framework must also execute on this thread. Worker threads, also known as background threads, where time-consuming background tasks are executed.

SwingUtilities.invokeLater Zasadniczo dopuszcza się tworzenie komponentów GUI z innych wątków, jednak z chwilą ich realizacji (metody pack() i setvisible(true)) dalsze operowanie na nich jest dopuszczalne jedynie z EDT. Obecnie zaleca się nawet takŝe tworzenie GUI z wątku EDT via: SwingUtilities.invokeLater( Runnable ) or SwingUtilities.invokeAndWait( Runnable ).

Tworzenie GUI z EDT static void createandshowgui(){ new?????appl() ; public static void main(string[] args) { javax.swing.swingutilities.invokelater(new Runnable() { public void run() { createandshowgui(); );

EventDispatchThread EDT The Swing Thread AWT-EventQueue-0 One of the most common errors is to tie up the AWT/Swing event thread with some long running computation or even a sleep. Everything freezes up. The GUI can't respond to mouse clicks and no repainting happens.

Krótka obsługa zdarzeń Wygodnie jest traktować kod wykonywany w wątku Swing jako szereg krótkich zadań, z których większość to wywołanie procedur obsługi zdarzeń (event-handling methods) jak ActionListener.actionPerformed. Jeśli te procedury nie kończą się szybko interfejs uŝytkownika przestaje reagować

Podsumowanie Time-consuming tasks should not be run on the Event Dispatch Thread. Swing components should be accessed on the Event Dispatch Thread only. SwingWorker is designed for situations where you need to have a long running task run in a background thread and provide updates to the UI either when done, or while processing. (dopiero w 1.6)

SwingWorker Example Zadanie: Obliczyć N wyrazów ciągu Fibonacciego. F n+1 = F n+1 + F n+1 {F 0 = 0, F 1 = 1 {0,1, 2, 3, 5, 8, 13, 21, 34, 55,... F 100 = 354224848179261915075

Okno aplikacji testowej

z EDT -->interfejs GUI zmroŝony!!! JButton calcinedt = new JButton("Calc in EDT") ; calcinedt.addactionlistener( new ActionListener () { public void actionperformed(actionevent ae) { int N = Integer.parseInt(how.getText().trim()) ; String r = "" + FibonacciNumbersTask.calcFibonacciNumbers(N) ; ); result.settext(r);

The solution is SwingWorker! Długhotrwałe akcje (long running task ): obliczenia, ładowanie obrazów, z pliku lub sieci, wykonanie eksperymentu pomiarowego,... naleŝy wykonywać za pomocą innych wątków (worker threads, background threads) Od wersji 1.6 moŝna skorzystać z klasy SwingWorker

Typy uogólnione (Generics) public abstract class SwingWorker<T,V> implements RunnableFuture<T> T - the result type returned by this SwingWorker's doinbackground and get methods V - the type used for carrying out intermediate results by this SwingWorker's publish and process methods

Wymiana danych class FibonacciNumbersTask extends SwingWorker<List<Integer>, Integer> { FibonacciNumbersTask(JTextArea textarea, int numberstofind) { this.textarea = textarea ; this.numberstofind = numberstofind ; F1 = 0; F2 = 1;...

doinbackground() i publish() public List<Integer> doinbackground() { int numberssofar = 0; while ((numberssofar < numberstofind) &&! iscancelled()) { Integer number = nextfibonaccinumber(); publish(number); numbers.add(number) ; setprogress(100 * numbers.size() / numberstofind); numberssofar ++ ; return numbers;

For each loop (array) For-each loop for (type var : arr) { body-of-loop Equivalent for loop for (int i = 0; i <arr.length; i++) { type var = arr[i]; body-of-loop

For each loop (Itarable) For-each loop for (type var : coll) { body-of-loop Equivalent for loop for (Iterator<type> iter = coll.iterator(); iter.hasnext(); ) { type var = iter.next(); body-of-loop

From Worker --> to EDT Istnieje moŝliwośc przekazywania rezultatów pośrednich w trakcie działania wątku worker Typ przekazywanych danych określony jest przez druki parametr SwingWorker-a Wmetodzie process (wywoływanej z EDT mozliwe jest wykorzystywanie tych danych (prezentacja wyników pośrednich) protected void process(list<integer> chunks) { for (int number : chunks) { textarea.append(number + ", ");

Swing'owy najemnik JButton calculate = new JButton("Let SwingWorker do the job ") ; calculate.addactionlistener( new ActionListener () { public void actionperformed(actionevent ae) { int N = Integer.parseInt(how.getText().trim()) ; task = new FibonacciNumbersTask(textArea, N); task.addpropertychangelistener( new PropertyChangeListener() { public void propertychange(propertychangeevent evt) { if ("progress".equals(evt.getpropertyname())) { progressbar.setvalue((integer)evt.getnewvalue()); ); ) ; textarea.settext("") ; task.execute();

setprogress(int) 0-100 public List<Integer> doinbackground() { int numberssofar = 0; while ((numberssofar < numberstofind) &&! iscancelled()) { Integer number = nextfibonaccinumber(); publish(number); numbers.add(number) ; setprogress(100 * numbers.size() / numberstofind); numberssofar ++ ; return numbers;

Properties state i progress evt) { task.addpropertychangelistener( new PropertyChangeListener() { public void propertychange(propertychangeevent if ("progress".equals(evt.getpropertyname())) { progressbar.setvalue((integer)evt.getnewvalue()); );

Model Komponentowy Javy Java Beans (Fasolki)

Komponenty programowe Components are self-contained, reusable software units that can be visually assembled into composite components, applets, applications, and servlets using visual application builder tools. JavaBean components are known as beans. Builder tools discover a bean's features (that is, its properties, methods, and events) by a process known as introspection.

Charakterystyki fasolek Properties are the appearance and behavior characteristics of a bean that can be changed at design time. Beans expose properties so they can be customized at design time. Beans use events to communicate with other beans. Persistence enables beans to save and restore their state.