Download - Język Java
![Page 1: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/1.jpg)
Język Java
Rysowanie GUI
Określanie wyglądu komponentów
![Page 2: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/2.jpg)
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
![Page 3: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/3.jpg)
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
![Page 4: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/4.jpg)
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
![Page 5: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/5.jpg)
5
Kolejność rysowania komponentu
![Page 6: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/6.jpg)
6
Przerysowywanie komponentu
• Przerysowanie komponentu - automatyczne
• Wymuszenie przerysowania - metoda repaint()
• W przypadku zmiany rozmiaru lub pozycji komponentu - wywołanie metody revalidate() przed repaint()
![Page 7: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/7.jpg)
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
![Page 8: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/8.jpg)
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
![Page 9: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/9.jpg)
9
(0,0)
y
x
(szer-1, wys-1)
Układ współrzędnych komponentu
jednostka układu współrzędnych - piksel
![Page 10: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/10.jpg)
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;
![Page 11: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/11.jpg)
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)
![Page 12: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/12.jpg)
12
Grafika: rysowanie kształtów
• Rysowanie liniivoid drawLine(x1, y1, x2, y2)
• Rysowanie figur– tylko brzegi - metoda drawXxx()– brzegi i wypełnienie - metoda fillXxx ()
• Przykład - rysowanie prostokątavoid fillRect(xlg, ylg, szer, wys)void drawRect(xlg, ylg, szer-1, wys-1)
• Wymiary - liczby całkowite (int)
![Page 13: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/13.jpg)
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
![Page 14: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/14.jpg)
14
Aplet Rysunekimport javax.swing.*;import java.awt.*;public class Rysunek extends JApplet { public void init() { panelRys mojPanel = new panelRys(); getContentPane().add(mojPanel, BorderLayout.CENTER); }}
![Page 15: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/15.jpg)
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) }}
![Page 16: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/16.jpg)
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
![Page 17: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/17.jpg)
17
Obrazy: kopiowanie (aplikacje)
• Metoda getImage() klasy java.awt.Toolkit– Image getImage(URL url)– Image getImage(String plik)
• PrzykładToolkit tk;Image rys1, rys2;tk = Toolkit.getDefaultToolkit();rys1 = tk.getImage("obrazek.gif");rys2 = tk.getImage(new URL(http://www.new.pl/rys/p1.gif));
![Page 18: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/18.jpg)
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ładImage rys = getImage(getDocumentBase,"plik.gif");
![Page 19: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/19.jpg)
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
![Page 20: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/20.jpg)
20
Aplet Obrazimport 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); }}
![Page 21: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/21.jpg)
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); }}
![Page 22: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/22.jpg)
22
Widok apletu Obraz
![Page 23: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/23.jpg)
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
![Page 24: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/24.jpg)
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()
![Page 25: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/25.jpg)
25
Tekst: rysowanie, klasa Graphics
• Rysowanie tekstu o parametrach określonych aktualną czcionkąvoid drawString("tekst", x, y)
• PrzykładFont f = new Font("TimesRoman",Font.PLAIN, 30);g.setFont(f);s = "Java";g.drawString(s, 50, 50);
![Page 26: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/26.jpg)
26
Tekst: wymiary czcionki
Xy Ascent
DescentHeight
Leading
a
![Page 27: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/27.jpg)
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()
![Page 28: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/28.jpg)
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
![Page 29: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/29.jpg)
29
Kolory: nazwy i wartości RGBColor.black 0, 0, 0Color.white 255, 255, 255Color.red 255, 0, 0Color.green 0, 255, 0Color.blue 0, 0, 255Color.gray 128, 128, 128Color.lightGgray 192, 192, 192Color.darkGray 64, 64, 64Color.magenta 255, 0, 255Color.yellow 255, 255, 0Color.cyan 0, 255, 255Color.pink 255, 175, 175Color.orange 255, 200, 0
![Page 30: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/30.jpg)
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()
![Page 31: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/31.jpg)
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);
![Page 32: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/32.jpg)
32
Aplet Koloryimport 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); }}
![Page 33: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/33.jpg)
33
Widok apletu Kolory
![Page 34: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/34.jpg)
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)
![Page 35: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/35.jpg)
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);
![Page 36: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/36.jpg)
36
Obramowania: rodzaje
![Page 37: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/37.jpg)
37
Obramowania: rodzaje
![Page 38: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/38.jpg)
38
Obramowania: rodzaje
![Page 39: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/39.jpg)
39
Obramowania: rodzaje
![Page 40: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/40.jpg)
40
Aplet Kropkiimport 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();
![Page 41: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/41.jpg)
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); }}
![Page 42: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/42.jpg)
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(); } }); }
![Page 43: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/43.jpg)
43
public void paintComponent(Graphics g) { super.paintComponent(g); if (p != null) g.fillOval(p.x-10, p.y-10, 20, 20); }}
![Page 44: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/44.jpg)
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
![Page 45: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/45.jpg)
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}
![Page 46: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/46.jpg)
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
![Page 47: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/47.jpg)
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
![Page 48: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/48.jpg)
48
Java 2D: wypełnianie gradientami
• Konstruktory klasy GradientPaintGradientPaint(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
![Page 49: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/49.jpg)
49
Aplet Gradientimport 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);
}}
![Page 50: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/50.jpg)
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); }}
![Page 51: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/51.jpg)
51
Widok apletu Gradient
![Page 52: Język Java](https://reader035.vdocuments.net/reader035/viewer/2022081512/568157c4550346895dc54de4/html5/thumbnails/52.jpg)
52
Java 3D
• Java 3D - zbiór klas umożliwiających tworzenie rzeczywistości wirtualnej, rozszerzenie pakietu JDK
• Najważniejsze klasy Javy 3D - w pakietach javax.media.j3d i javax.vecmath