1 / 52

Język Java

Język Java. Rysowanie GUI Określanie wyglądu komponentów. Rysowanie GUI. Rysowanie GUI w Swingu np. przy pierwszym wyświetleniu przy ponownym odsłonięciu przy zmianach stanu programu Kolejność rysowania - zgodnie z hierarchią komponentów Każdy komponent rysuje się sam.

gavan
Download Presentation

Język Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Rysowanie GUI • Rysowanie GUI w Swingu np. • przy pierwszym wyświetleniu • przy ponownym odsłonięciu • przy zmianach stanu programu • Kolejność rysowania - zgodnie z hierarchią komponentów • Każdy komponent rysuje się sam

  3. Kolejność rysowania GUI • Przykład - aplikacja AplikSwing • JFrame - rysuje ramkę • panel z zawartością (content pane) - rysuje tło (szary prostokąt) • JLabel - rysuje tekst etykiety • JButton - rysuje przycisk i ewentualny napis

  4. Własności komponentu • Komponent może być • przezroczysty • nieprzezroczysty (opaque) - z tłem • Na komponencie można rysować • Ustawianie • kolorów • wyglądu czcionki komponentu • obramowania

  5. Kolejność rysowania komponentu

  6. Przerysowywanie komponentu • Przerysowanie komponentu - automatyczne • Wymuszenie przerysowania - metoda repaint() • W przypadku zmiany rozmiaru lub pozycji komponentu - wywołanie metody revalidate() przed repaint()

  7. Grafika • Podstawowe operacje graficzne np. • rysowanie linii • rysowanie figur • rysowanie znaków tekstu • wstawianie obrazów • Operacje - zdefiniowane jako metody klasy java.awt.Graphics • Obiekt klasy Graphics przechowuje aktualne ustawienia stanu graficznego

  8. Grafika: rysowanie • Rysowanie - na dowolnym komponencie • Najczęściej - rysowanie na panelu (JPanel) • Wszystkie polecenia rysowania - w metodzie paintComponent() klasy JComponent (konieczność przesłonięcia) • Argument metody - obiekt klasy Graphics

  9. Układ współrzędnych komponentu jednostka układu współrzędnych - piksel x (0,0) (szer-1, wys-1) y

  10. Ustalanie wymiarów komponentu • Określanie wymiarów komponentu (metody klasy JComponent) int getWidth() int getHeight() • Rysowanie obramowania - zmniejszenie wymiaru komponentu • Określenie rozmiaru obramowania - metoda getInsets(), np. Insets b = getInsets(); s = getWidth() - b.left - b.right;w = getHeight() - b.top - b.bottom;

  11. Grafika: dostępne kształty • Linia (Line) • Figury • prostokąt (Rect) • prostokąt z efektem 3D (3DRect) • prostokąty o zaokrąglonych brzegach (RoundRect) • owal - okrąg lub elipsa (Oval) • łuk (Arc) • Wieloboki (Polygon, Polyline)

  12. Grafika: rysowanie kształtów • Rysowanie linii void drawLine(x1, y1, x2, y2) • Rysowanie figur • tylko brzegi - metoda drawXxx() • brzegi i wypełnienie - metoda fillXxx () • Przykład - rysowanie prostokąta void fillRect(xlg, ylg, szer, wys) void drawRect(xlg, ylg, szer-1, wys-1) • Wymiary - liczby całkowite (int)

  13. Grafika: rysowanie kształtów • Wieloboki - argument w postaci grupy par współrzędnych x i y wierzchołków • Owale - argumenty • współrzędne x i y lewego górnego rogu obszaru, w który zostanie wpisany owal • szerokość i wysokość owalu • Łuki - argumenty jak dla owalu oraz • kąt, od jakiego zacznie się rysowanie łuku • kąt określający rozpiętość łuku

  14. Aplet Rysunek import javax.swing.*; import java.awt.*; public class Rysunek extends JApplet { public void init() { panelRys mojPanel = new panelRys(); getContentPane().add(mojPanel, BorderLayout.CENTER); } }

  15. class panelRys extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // tło Insets w = getInsets(); int X = getWidth() - w.left - w.right; int Y = getHeight() - w.top - w.bottom; int x1 = X/4; int y1 = Y/4; int szer = X/2; int wys = Y/2; g.drawRect(x1, y1, szer, wys); g.fillRect(szer, y1, x1, y1); int x2 = x1/2; int y2 = y1/2; g.drawLine(x1+x2, y2, x1+x2, y1+wys+y2) } }

  16. Obrazy • Obrazy (formaty GIF i JPEG) - przechowywane jako odrębne pliki • Obraz - obiekt klasy java.awt.Image • Metody klasy Image zwracające wymiary obrazu - getWidth() i getHeight() • Umieszczanie obrazu na komponencie • kopiowanie do komponentu • wyświetlanie

  17. Obrazy: kopiowanie (aplikacje) • Metoda getImage() klasy java.awt.Toolkit • Image getImage(URL url) • Image getImage(String plik) • Przykład Toolkit tk; Image rys1, rys2; tk = Toolkit.getDefaultToolkit(); rys1 = tk.getImage("obrazek.gif"); rys2 = tk.getImage(new URL(http://www.new.pl/rys/p1.gif));

  18. Obrazy: kopiowanie (aplety) • Metoda getImage() klasy Applet • Image getImage(URL url) • Image getImage(URL url, String plik) • Metody klasy Applet zwracające obiekty klasy URL • getCodeBase() - adres URL katalogu z apletem • getDocumentBase() - adres URL katalogu z dokumentem HTML • Przykład Image rys = getImage(getDocumentBase,"plik.gif");

  19. Obrazy: wyświetlanie • Wyświetlanie - metoda drawImage() klasy Graphics • Sposoby wyświetlania • obraz w jego oryginalnych wymiarach void drawImage(obraz,x,y,this); • obraz przeskalowany void drawImage(obraz,x,y, szer, wys, this); • Argumenty metody x, y - współrzędne lewego górnego rogu obrazu

  20. Aplet Obraz import javax.swing.*; import java.awt.*; public class Obraz extends JApplet { public void init() { Image obraz=getImage(getCodeBase(), "fotki/foto.jpg"); panelObraz mojPanel = new panelObraz(obraz); getContentPane().add(mojPanel, BorderLayout.CENTER); } }

  21. class panelObraz extends JPanel { Image obraz; public panelObraz(Image obraz) { this.obraz = obraz; } public void paintComponent(Graphics g) { super.paintComponent(g); int a = obraz.getWidth(this); int b = obraz.getHeight(this); g.drawImage(obraz, 0, 0, this); g.drawImage(obraz, a, 0, a+10, b/2, this); } }

  22. Widok apletu Obraz

  23. Tekst • Klasy z pakietu java.awt odpowiedzialne za wygląd tekstu • Font - określa rodzaj, styl i wielkość czcionki • FontMetrics - określa szczegółowo parametry czcionki - tzw. metrykę(np. wysokość i szerokość liter) • Rysowanie tekstu na komponencie • komponenty Swingu • metoda drawString() klasy Graphics

  24. Tekst: wybór rodzaju czcionki • Argumenty konstruktora klasy Font • nazwa czcionki, np. "TimesRoman" ("serif"), "Courier" ("monospaced"), "Helvetica" ("sanserif") • styl czcionki, np. Font.PLAIN, Font.BOLD, Font.ITALIC (można dodawać) • wielkość czcionki • Jeśli użyta czcionka nie jest dostępna, Java użyje czcionki domyślnej • Ustawienie czcionki aktualnej - setFont()

  25. Tekst: rysowanie, klasa Graphics • Rysowanie tekstu o parametrach określonych aktualną czcionką void drawString("tekst", x, y) • Przykład Font f = new Font("TimesRoman", Font.PLAIN, 30); g.setFont(f); s = "Java"; g.drawString(s, 50, 50);

  26. Tekst: wymiary czcionki Xy Ascent Height Descent a Leading

  27. Tekst: metryka czcionki • Metody klasy FontMetrics • stringWidth(String) - zwraca szerokość łańcucha znaków (w pikselach) • charWidth(char) - zwraca szerokość znaku • getAscent() • getDescent() • getLeading() • getHeight()

  28. Kolory • Kolory i metody operujące na kolorach - definicje w klasie java.awt.Color • Abstrakcyjne wzorzec koloru - kombinacja wartości kolorów podstawowych (RGB) - liczb z zakresu 0 ÷ 255, np. Color k = new Color(100, 50, 150); • Kolor niedostępny w systemie - zastępowany podobnym

  29. Kolory: nazwy i wartości RGB Color.black 0, 0, 0 Color.white 255, 255, 255 Color.red 255, 0, 0 Color.green 0, 255, 0 Color.blue 0, 0, 255 Color.gray 128, 128, 128 Color.lightGgray 192, 192, 192 Color.darkGray 64, 64, 64 Color.magenta 255, 0, 255 Color.yellow 255, 255, 0 Color.cyan 0, 255, 255 Color.pink 255, 175, 175 Color.orange 255, 200, 0

  30. Określanie wyglądu komponentu • Metoda klasy JComponent ustawiająca przezroczystość komponentu - setOpaque(boolean), np. przeroczysty: komponent.setOpaque(false); • Kontrola przezroczystości - getOpaque() • Metoda klasy JComponent ustawiająca czcionkę komponentu - setFont(Font) • Informacje o czcionce - getFont(), getFontMetrics()

  31. Określanie wyglądu komponentu • Metody klasy JComponent ustawiające kolor • setBackground(Color) - tła • setForeground(Color) - pierwszego planu • Analogiczne metody zwracające ustawienia • getBackground(), getForeground() • Ustawianie koloru, np. komponent.setBackground(Color.red); • Ustawianie własnego koloru, np. Color c = new Color(150, 10, 150); komponent.setForeground(c);

  32. Aplet Kolory import javax.swing.*; import java.awt.*; public class Kolory extends JApplet { public void init() { Font c = new Font("sanserif", Font.ITALIC, 40); JLabel napis = new JLabel("Java", JLabel.CENTER); Container kont = getContentPane(); kont.add(napis); napis.setOpaque(true); napis.setBackground(Color.yellow); napis.setForeground(Color.blue); napis.setFont(c); } }

  33. Widok apletu Kolory

  34. Określanie wyglądu komponentu • Metody klasy JComponent określające wymiary elementu • int getWidth() • int getHeight() • Dimension getSize() • Dimension getPreferredSize() • Dimension getMaximumSize() • Dimension getMinimumSize() • Inne metody np. • void setPreferredSize(Dimension)

  35. Obramowanie komponentu • Dodawanie obramowania - metoda setBorder() klasy JComponent • Typy obramowania (klasa javax.swing.BorderFactory) • Line, Etched, LoweredBevel, RaisedBevel, Empty, Matte, Titled, Compound • Tworzenie obramowania - createXxxBorder() • Przykład b=BorderFactory.createLineBorder(Color.black); komponent.setBorder(b);

  36. Obramowania: rodzaje

  37. Obramowania: rodzaje

  38. Obramowania: rodzaje

  39. Obramowania: rodzaje

  40. Aplet Kropki import java.awt.event.*; import javax.swing.*; import java.awt.*; public class Kropki extends JApplet { JLabel tekst = new JLabel("Kliknij w dowolnym miejscu białego obszaru!", JLabel.LEFT); myszPanel panel = new myszPanel();

  41. public void init() { Container kont = getContentPane(); tekst.setOpaque(true); tekst.setBackground(Color.yellow); panel.setOpaque(true); panel.setBackground(Color.white); panel.setForeground(Color.blue); panel.setBorder( BorderFactory.createEtchedBorder()); kont.add(panel, BorderLayout.CENTER); kont.add(tekst, BorderLayout.SOUTH); } }

  42. class myszPanel extends JPanel { Point p; public myszPanel() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent zd) { int x = zd.getX(); int y = zd.getY(); if (p == null) p = new Point(x, y); else { p.x = x; p.y = y; } repaint(); } }); }

  43. public void paintComponent(Graphics g) { super.paintComponent(g); if (p != null) g.fillOval(p.x-10, p.y-10, 20, 20); } }

  44. Java 2D • Java 2D - zbiór dodatkowych klas dostarczających programom wysokiej jakości grafiki dwuwymiarowej • Java2D umożliwia m.in. • ustalenie rodzaju wypełnienia (np. gradienty) • ustalenie szerokości i rodzaju linii • przesuwanie, obracanie, skalowanie tekstu i grafiki • Współrzędne w Java2D – typu float

  45. Java 2D: Klasa Graphics2D • Operacje rysowania grafiki - klasa Graphics • Java2D używa obiektu klasy Graphics2D (pakiet java.awt) konieczność rzutowania • Przykład – metoda paintComponent() public void paintComponent(Graphics g) {Graphics2D g2D=(Graphics2D)g;// treść metody}

  46. Java 2D: metody grafiki 2D • Wykonywanie wszystkich operacji grafiki 2D - na obiektach klasy Graphics2D, nawet jeśli metody 2D i nie-2D sa takie same • Przykład – definiowanie kolorówg2D.setColor(Color.black); • Dodatkowe klasy grafiki 2D - w pakiecie java.awt.geom - np. Line2D, Line2D.Float, Point2D, Rectangle2D, Rectangle2D.Float

  47. Java 2D: rodzaje wypełnienia • Wypełnianie w Java2D – metoda setPaint() • Rodzaje wypełnień • kolorem • gradientami • teksturą • własnym wzorem • Interfejs Paint zawiera klasy GradientPaint, TexturePaint i Color

  48. Java 2D: wypełnianie gradientami • Konstruktory klasy GradientPaint GradientPaint(x1, y1, kolor1, x2, y2, kolor2)GradientPaint(x1, y1, kolor1, x2, y2, kolor2, true) • Rysowanie gradientu • początek w punkcie x1,y1 - kolor kolor1 • koniec w punkcie x2,y2 - kolor kolor2 • true określa, czy gradient ma być rysowany cyklicznie

  49. Aplet Gradient import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class Gradient extends JApplet { public void init() { panelRys mojPanel = new panelRys(); getContentPane().add(mojPanel, BorderLayout.CENTER); } }

  50. class panelRys extends JPanel { public void paintComponent(Graphics g){ super.paintComponent(g); Dimension d = getSize(); int s = d.width; int w = d.height; Graphics2D g2D = (Graphics2D)g; GradientPaint wzor = new GradientPaint(0, 0, Color.white, s, w,Color.blue); g2D.setPaint(wzor); Rectangle2D.Float pr = new Rectangle2D.Float(0, 0, s, w); g2D.fill(pr); } }

More Related