Programowanie obiektowe

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

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

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

SWING. dr Jarosław Skaruz

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

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

Programowanie graficznych interfejsów użytkownika

Java - interfejs graficzny

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

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

Tworzenie i obsługa graficznego interfejsu uŝytkownika

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

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

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

Tworzenie elementów graficznych

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

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

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

Programowanie obiektowe

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

Java biblioteka Swing

Programowanie zdarzeniowe

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

Aplikacja wielowątkowa prosty komunikator

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

Podstawowe informacje o apletach

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

Programowanie w języku Java

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

Kontenery i komponenty graficzne

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

Aplikacja wielow tkowa prosty komunikator

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

Wykład 12: Obsługa Zdarzeń

Operatory. Składnia. Typy proste. Znaki specjalne

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

Interfejs graczny w Javie.

Multimedia JAVA. Historia

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

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

Język Java. Rysowanie GUI Określanie wyglądu komponentów

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

Java jako zdalny interfejs aplikacji Webowych aplety

PROGRAMOWANIE APLIKACJI MULTIMEDIALNYCH

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

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

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

Podstawy Języka Java

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

Doskonalsze i nowe komponenty GUI

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

Obsługa zdarzeń. Wykład 4

Programowanie w języku Java WYKŁAD

Aplikacje w Javie wykład 12 Programowanie GUI

9. Swing wprowadzenie

Programowanie w języku Java

Programowanie obiektowe

Programowanie graficznych interfejsów uŝytkownika

Bezpieczne uruchamianie apletów wg

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

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

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

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Graphic User Interfaces pakiet Swing

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

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

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

Programowanie zdarzeniowe

Programowanie Obiektowe Java

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

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

Programowanie w języku Java

Połączenia między bazami danych i programem w języku Java część 2

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

Język obiektowy o składni podobnej do C++ Zarządzanie pamięcią niepotrzebne obiekty automatycznie usuwane

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

Programowanie zdarzeniowe

Podstawy programowania GUI niskiego poziomu. APLETY.

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

Programowanie obiektowe

Dokumentacja do API Javy.

Języki i Techniki Programowania II. Wykład 13. TRaX, Applety, Java Security

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

Programowanie komponentowe

Wstęp do programowania w języku Java

Wykład 7: Pakiety i Interfejsy

Iteracyjno-rozwojowy cykl oprogramowania 4

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

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

Podstawy otwartych języków programowania Język Java

1 Atrybuty i metody klasowe

Programowanie obiektowe

Aplikacje w Javie wykład 12 Programowanie GUI

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

Podstawy Programowania

Wykład 11: Programowanie Apletów

Ćwiczenie 8. Rozległe sieci komputerowe

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

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

Programowanie sieciowe

Transkrypt:

Programowanie obiektowe Wykład 12: GUI. Aplety. 5/19/2013 S.Deniziak:Programowanie obiektowe 1 Pakiety graficzne w Javie AWT (Abstract Window Toolkit) Swing Java 1.1 Java 2.0 Java 2D Java 3D Java Media Framework Java Advance Imaging 5/19/2013 S.Deniziak:Programowanie obiektowe 2 1

Struktura aplikacji graficznej import javax.swing.*; Importowanie pakietów: javax.swing javax.swing.event java.awt java.awt.event 5/19/2013 S.Deniziak:Programowanie obiektowe 3 Struktura aplikacji graficznej, cd. import javax.swing.*; public class HelloWorldSwing { public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); Utworzenie głównego kontenera: JFrame, JDialog, JApplet 5/19/2013 S.Deniziak:Programowanie obiektowe 4 2

Struktura aplikacji graficznej, cd. import javax.swing.*; public class HelloWorldSwing { public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); final JLabel label = new JLabel("Hello World"); frame.getcontentpane().add(label); Utworzenie i rozmieszczenie komponentów: JLabel, JButton, JTextField, JMenu, 5/19/2013 S.Deniziak:Programowanie obiektowe 5 Struktura aplikacji graficznej, cd. import javax.swing.*; public class HelloWorldSwing { public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); final JLabel label = new JLabel("Hello World"); frame.getcontentpane().add(label); frame.setdefaultcloseoperation(jframe.exit_on_close); Dodanie obsługi zdarzeń: frame.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); 5/19/2013 S.Deniziak:Programowanie obiektowe 6 3

Struktura aplikacji graficznej, cd. import javax.swing.*; public class HelloWorldSwing { public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); final JLabel label = new JLabel("Hello World"); frame.getcontentpane().add(label); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.setvisible(true); Wyświetlenie okna: 5/19/2013 S.Deniziak:Programowanie obiektowe 7 Rozmieszczanie komponentów w kontenerach Kontenery: główne: JFrame, JDialog, JApplet pośrednie: JPanel, Rozmieszczanie komponentów: menadżer rozmieszczenia (LayoutManager): BorderLayout CardLayout GridBagLayout SpringLayout BoxLayout FlowLayout GridLayout np.contentpane.setlayout(new FlowLayout()); 5/19/2013 S.Deniziak:Programowanie obiektowe 8 4

BorderLayout (domyślny) JButton button = new JButton("Button 1 (PAGE_START)"); pane.add(button, BorderLayout.PAGE_START); button = new JButton("Button 2 (CENTER)"); button.setpreferredsize(new Dimension(200, 100)); pane.add(button, BorderLayout.CENTER); button = new JButton("Button 3 (LINE_START)"); pane.add(button, BorderLayout.LINE_START); button = new JButton("Long-Named Button 4 (PAGE_END)"); pane.add(button, BorderLayout.PAGE_END); button = new JButton("5 (LINE_END)"); pane.add(button, BorderLayout.LINE_END); 5/19/2013 S.Deniziak:Programowanie obiektowe 9 Obsługa zdarzeń Interfejs ActionListener public class Beeper... implements ActionListener {... //inicjalizacja button.addactionlistener(this);... public void actionperformed(actionevent e) {...// Akcja klasa ActionEvent String getactioncommand() int getmodifiers() Object getsource() 5/19/2013 S.Deniziak:Programowanie obiektowe 10 5

Obsługa klawiatury Interfejs Klasa implementująca Metody KeyListener KeyAdapter keypressed(keyevent) keyreleased(keyevent) keytyped(keyevent) np. element.addkeylistener(new KeyAdapter()); element.removekeylistener(new KeyAdapter()); 5/19/2013 S.Deniziak:Programowanie obiektowe 11 Obsługa myszki Interfejs Klasa implementująca Metody MouseListener MouseAdapter mouseclicked(mouseevent) mouseentered(mouseevent) mouseexited(mouseevent) mousepressed(mouseevent) mousereleased(mouseevent) MouseMotionListener MouseMotionAdapter mousedragged(mouseevent) mousemoved(mouseevent) MouseInputListener MouseInputAdapter -II- np. element.addmouselistener(new MouseAdapter()); element.removemouselistener(new MouseAdapter()); 5/19/2013 S.Deniziak:Programowanie obiektowe 12 6

Grafika użytkownika Klasa JComponent Graphics2D protected void paintcomponent(graphics g) {... Insets insets = getinsets(); int currentwidth = getwidth() - insets.left - insets.right; int currentheight = getheight() - insets.top - insets.bottom;...... Rysowanie: g.drawline(),g.drawrect(), g.drawarc(), g.drawstring(), g.fillrect(), g.setcolor(), itp.. 5/19/2013 S.Deniziak:Programowanie obiektowe 13 Struktura apletu MojApplet.class: public class MojApplet extends JApplet { public void init() { public void start() { public void stop() { public void destroy() { MojApplet.html: <APPLET CODE=MojApplet.class WIDTH=200 HEIGHT=100> </APPLET> appletviewer MojApplet.html 5/19/2013 S.Deniziak:Programowanie obiektowe 14 7

Przykład // <applet code=sinewave width=700 height=400></applet> import javax.swing.*; import javax.swing.event.*; import java.awt.*; class SineDraw extends JPanel { private static final int SCALEFACTOR = 200; private int cycles; private int points; private double[] sines; private int[] pts; public SineDraw() { setcycles(5); public void setcycles(int newcycles) { cycles = newcycles; points = SCALEFACTOR * cycles * 2; sines = new double[points]; for(int i = 0; i < points; i++) { double radians = (Math.PI/SCALEFACTOR) * i; sines[i] = Math.sin(radians); repaint(); 5/19/2013 S.Deniziak:Programowanie obiektowe 15 Przykład, cd. public void paintcomponent(graphics g) { super.paintcomponent(g); int maxwidth = getwidth(); double hstep = (double)maxwidth/(double)points; int maxheight = getheight(); pts = new int[points]; for(int i = 0; i < points; i++) pts[i] = (int)(sines[i] * maxheight/2 *.95 + maxheight/2); g.setcolor(color.red); for(int i = 1; i < points; i++) { int x1 = (int)((i - 1) * hstep); int x2 = (int)(i * hstep); int y1 = pts[i-1]; int y2 = pts[i]; g.drawline(x1, y1, x2, y2); 5/19/2013 S.Deniziak:Programowanie obiektowe 16 8

Przykład, cd. public class SineWave extends JApplet { private SineDraw sines = new SineDraw(); private JSlider adjustcycles = new JSlider(1, 30, 5); public void init() { Container cp = getcontentpane(); cp.add(sines); adjustcycles.addchangelistener(new ChangeListener() { public void statechanged(changeevent e) { sines.setcycles( ((JSlider)e.getSource()).getValue()); ); cp.add(borderlayout.south, adjustcycles); 5/19/2013 S.Deniziak:Programowanie obiektowe 17 Przykład, cd. 5/19/2013 S.Deniziak:Programowanie obiektowe 18 9

Aplety w XHTML <?xml version="1.0" encoding="iso-8859-2"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> <title>tytuł strony </title> </head> <body> <p> <table cellpadding="10"> <tr> <td style="background-color:black;"> <applet code="sinewave.class" width="600" height="400"> <param name="pola" value="5" /> Uwaga! Twoja przeglądarka nie widzi appletu! </applet> </td></tr> </table> </p> </body> </html> 5/19/2013 S.Deniziak:Programowanie obiektowe 19 Aplety złożone z kilku klas jar cf MojAplet.jar *.class <head><title>mój Aplet </title></head> <body> <applet code=mojaplet.class archive=mojaplet.jar width=200 height=100> </applet> </body> 5/19/2013 S.Deniziak:Programowanie obiektowe 20 10

Ograniczenia apletów Łączność tylko z serwerem HTTP Brak dostępu do lokalnego systemu plików Brak możliwości odczytu własności systemowych Nie można ładować bibliotek ani uruchamiać metod typu native 5/19/2013 S.Deniziak:Programowanie obiektowe 21 Podpisywanie apletów (1) import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class FileAccessApplet extends JApplet { private JTextField filename = new JTextField(), dir = new JTextField(); private JButton open = new JButton("Open"), save = new JButton("Save"); private JEditorPane ep = new JEditorPane(); private JScrollPane jsp = new JScrollPane(); private File file; public void init() { JPanel p = new JPanel(); open.addactionlistener(new OpenL()); p.add(open); save.addactionlistener(new SaveL()); p.add(save); Container cp = getcontentpane(); jsp.getviewport().add(ep); cp.add(jsp, BorderLayout.CENTER); cp.add(p, BorderLayout.SOUTH); dir.seteditable(false); save.setenabled(false); ep.setcontenttype("text/html"); filename.seteditable(false); p = new JPanel(); p.setlayout(new GridLayout(2, 1)); p.add(filename); p.add(dir); cp.add(p, BorderLayout.NORTH); 5/19/2013 S.Deniziak:Programowanie obiektowe 22 11

Podpisywanie apletów (2) class OpenL implements ActionListener { public void actionperformed(actionevent e) { JFileChooser c = new JFileChooser(); c.setfilefilter(new TextFileFilter()); // Demonstrate "Open" dialog: int rval = c.showopendialog(fileaccessapplet.this); if(rval == JFileChooser.APPROVE_OPTION) { file = c.getselectedfile(); filename.settext(file.getname()); dir.settext(c.getcurrentdirectory().tostring()); try { System.out.println("Url is " + file.tourl()); ep.setpage(file.tourl()); // ep.repaint(); catch (IOException ioe) { throw new RuntimeException(ioe); if(rval == JFileChooser.CANCEL_OPTION) { filename.settext("you pressed cancel"); dir.settext(""); else { save.setenabled(true); class SaveL implements ActionListener { public void actionperformed(actionevent e) { JFileChooser c = new JFileChooser(file); c.setselectedfile(file); // Demonstrate "Save" dialog: int rval = c.showsavedialog(fileaccessapplet.this); if(rval == JFileChooser.APPROVE_OPTION) { filename.settext(c.getselectedfile().getname()); dir.settext(c.getcurrentdirectory().tostring()); try { FileWriter fw = new FileWriter(file); ep.write(fw); catch (IOException ioe) { throw new RuntimeException(ioe); if(rval == JFileChooser.CANCEL_OPTION) { filename.settext("you pressed cancel"); dir.settext(""); 5/19/2013 S.Deniziak:Programowanie obiektowe 23 Podpisywanie apletów (3) public class TextFileFilter extends javax.swing.filechooser.filefilter { public boolean accept(file f) { return f.getname().endswith(".txt") f.isdirectory(); public String getdescription() { return "Text Files (*.txt)"; jar cf fileaccess.jar *.class 5/19/2013 S.Deniziak:Programowanie obiektowe 24 12

Podpisywanie apletów 1. Utworzenie pliku JAR: jar cf aplet.jar *.class 2. Utworzenie klucza: keytool genkey alias <keyname> -keystore <url> keytool list keystore <url> 3. Podpisanie pliku JAR: jarsigner keystore <url> <jarfile> <keyname> 5/19/2013 S.Deniziak:Programowanie obiektowe 25 Pytania 1. Które metody są wystarczające w aplecie? 2. Na czym polega programowanie zdarzeniowe? 3. Co realizuje menadżer rozmieszczenia? 4. Zastosowanie dziedziczenia w tworzeniu GUI. 5. Zastosowanie polimorfizmu w tworzeniu GUI. 5/19/2013 S.Deniziak:Programowanie obiektowe 26 13

Koniec 5/19/2013 S.Deniziak:Programowanie obiektowe 27 14