PK - Swing
Transkrypt
PK - Swing
Kierunek: Przedmiot: Forma zajęć: Temat: Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji z wykorzystaniem graficznego interfejsu użytkownika - Swing. Biblioteka SWING • podstawowa bliblioteka do tworzenia interfejsów użytkownika, • rozszerzenie możliwości biblioteki AWT, • napisana całkowicie w Javie, • bogaty zestaw komponentów, przyciski, etykiety, listy, drzewa, tabele itp., • łatwa zmiana wyglądu aplikacji, • pełna obsługa grafiki 2D, • drag-and-drop, • internacjonalizacja, • nazwy obiektów JNazwa, • główny pakiet to: javax.swing 1 Główne kontenery JApplet JDialog JFrame Klasa JFrame • • utworzenie okna z tytułem, ramką, menu, kontener dla innych komponentów. import javax.swing.*; public class Test { public static void main(String[] args) { JFrame ramka = new JFrame("Pierwszy program"); JLabel napis = new JLabel("Tekst"); ramka.add(napis); ramka.setSize(200,200); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.setVisible(true); } } 2 Klasa JPanel • podstawowy kontener import javax.swing.* import java.awt.*; class MojPanel extends JPanel { JButton przycisk1,przycisk2,przycisk3; public MojPanel (){ przycisk1 = new JButton("pierwszy"); przycisk2 = new JButton("drugi"); przycisk3 = new JButton("trzeci"); add(przycisk1); add(przycisk2); add(przycisk3); setBackground(Color.yellow); } public void paintComponent(Graphics g) { super.paintComponent(g); } } public class Test { public static void main(String[] args) { JFrame ramka = new JFrame("Aplikacja w SWING'u"); MojPanel panel = new MojPanel(); ramka.add(panel); ramka.setSize(400,100); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.setVisible(true); } } 3 Pozostałe komponenty - kontenery JPanel JScrollPane JSplitPane JTabbedPane JToolBar Pozostałe komponenty JButton JComboBox JList JMenu 4 JSlider JTextField JLabel JProgressBar JToolTip JColorChooser JFileChooser JTable JTextComponent 5 JTree Menedżery rozkładu • • • główne kontenery korzystają z rozkładu BorderLayout, kontener JPanel używa rozkładu FlowLayout, zmiana domyślnego rozkądu to metoda setLayout() JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); BorderLayout BoxLayout FlowLayout GridLayout GridBagLayout 6 Obsługa zdarzeń • deklaracja klasy obsługującej zdarzenia (interfejs ActionListener), class Obsluga implements ActionListener • stworzenie kodu uruchamianego podczas konkretnego zdarzenia, public void actionPerformed (ActionEvent e) • rejestracja obiektu powyższej klasy jako „nasłuchiwacza” dla jednego bądź też wielu komponentów, komponent.addListener (obiekt klasy Obsluga) • import odpowiednich interfejsów i klas do obsługi zdarzeń. import java.awt.event.*; Zdarzenia i powiązane z nimi typy nasłuchiwaczy Typ zdarzenia Typ nasłuchiwacza ActionListener Kliknięcie na przycisku, naciśnięcie klawisza Enter podczas pisania w polu tekstowym, wybranie pozycji z menu WindowListener Zamknięcie ramki (główne okno) MouseListener Obługa przycisków myszy MouseMotionListener Obsługa poruszania myszą ComponentListener Komponent staje się widoczny FocusListener Komponent uzyskuje fokus ListSelectionListener Wybór z listy Przykładowa aplikacja import javax.swing.*; import java.awt.*; import java.awt.event.*; class MojPanel extends JPanel { JButton przycisk1,przycisk2,przycisk3; public MojPanel (){ przycisk1 = new JButton("Czerwony"); przycisk2 = new JButton("Zielony"); przycisk3 = new JButton("Żółty"); add(przycisk1); add(przycisk2); add(przycisk3); 7 Obsluga dzialanie1 = new Obsluga(Color.red); Obsluga dzialanie2 = new Obsluga(Color.green); Obsluga dzialanie3 = new Obsluga(Color.yellow); przycisk1.addActionListener(dzialanie1); przycisk2.addActionListener(dzialanie2); przycisk3.addActionListener(dzialanie3); setBackground(Color.white); } public void paintComponent(Graphics g) { super.paintComponent(g); } private class Obsluga implements ActionListener { private Color kolor; public Obsluga(Color k){ this.kolor = k; } public void actionPerformed(ActionEvent e){ setBackground(kolor); repaint(); } } } public class Test { public static void main(String[] args) { JFrame ramka = new JFrame("Aplikacja w SWING'u"); MojPanel panel = new MojPanel(); ramka.add(panel); ramka.setSize(400,100); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.setVisible(true); } } 8 Grafika • • • metoda paintComponent(Graphics g) grafika dwuwymiarowa: klasa Graphics2D przykładowe klasy pakietu java.awt.geom: Point2D, Line2D,Rectangle2D, Ellipse2D • • czcionki: klasa Font kolory: klasa Color import javax.swing.*; import java.awt.*; import java.awt.geom.*; class MojPanel extends JPanel { JButton przycisk1,przycisk2,przycisk3; public MojPanel (){ setBackground(Color.white); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setPaint(Color.red); Line2D linia = new Line2D.Double (10,10,380,10); g2.draw(linia); g2.setPaint(Color.green); Rectangle2D pros = new Rectangle2D.Double (10,20,370,40); g2.draw(pros); g2.setPaint(Color.blue); Font czcionka = new Font("Tahoma", Font.BOLD, 20); g2.setFont(czcionka); g2.drawString("Figury geometryczne",10,120); } } public class Test { public static void main(String[] args) { JFrame ramka = new JFrame("Figury"); MojPanel panel = new MojPanel(); ramka.add(panel); ramka.setSize(400,200); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 9 ramka.setVisible(true); } } Swing w przykładach http://java.sun.com/docs/books/tutorial/uiswing/index.html Zadania 1. Dodaj do przykładowego kodu dwa nowe przyciski "Biały" oraz "Niebieski". Dodaj również etykietę tekstową JLabel, która będzie zawierać napis: Aktualny kolor to: aktualny kolor. Uzupełnij brakujący kod tak, aby aplikacja działała prawidłowo. Wykorzystaj BorderLayout oraz dodatkowe kontenery. Tekst z przycisku możesz pobrać za pomocą metody getActionCommand() dostępnej w klasie ActionEvent. 10 2. Napisz prosty kalkulator. +---------------+-+ | Kalkulator |x| +---------------+-+ | Pole tekstowe | +---+---+---+---+ | 7 | 8 | 9 | / | +---+---+---+---+ | 4 | 5 | 6 | x | +---+---+---+---+ | 1 | 2 | 3 | - | +---+---+---+---+ | 0 | . | = | + | +---+---+---+---+ Wykorzystaj obsługę zdarzeń, komponenty itd. 3. Napisz nastepujaca aplikacje: +---------------------------------------------------------------------------+-+ | MiniOutlook - Imię i Nazwisko |x| +---------------------------------------------------------------------------+-+ | Plik Wiadomość Konto Pomoc | +-----------------------------------------------------------------------------+ | 1 2 3 4 | 5 | +-------------------------+------------+---------------------------+----------+ |-MiniOutlook | Od | Temat | Rozmiar | |`-Foldery Lokalne +------------+---------------------------+----------+ | |-Skrzynka odbiorcza | Arek Zaproszenie 12 KB | | |-Skrzynka nadawcza | Madzia Wyniki 3 KB | | |-Elementy wyslane | Jurek FWD: Smieszne 195 KB | | `-Kopie robocze | | | +---------------------------------------------------+ | | | | | Zapraszam Was serdecznie dzis na spotkanie do| | | tyczace znajomosci GUI w srodowisku JAVA. | | | | | | Sala 426 | | | godz 14.00 | | | | | | pozdrawiam | | | | | | Arkadiusz Markowski | | | | +-------------------------+---------------------------------------------------+ | Wiadomosci: 34, nie przeczytane: 53 | +-----------------------------------------------------------------------------+ Aplikacja: Tytuł: MiniOutlook - Imię Nazwisko (proszę podać swoje dane) Całość zawiera Menu, Toolbar z obrazkami oraz główne okno podzielone na 4 cześci: 1 cześć: Drzewo z odpowiednią struktura 2 cześć: Tabela z wiadomościami 3 cześć: Podgląd wiadomości (komponent tekstowy) 4 cześć: Status (komponent tekstowy) 11 Wszystkie komponenty zostały opisane ponizej: Menu: Struktura menu: Plik - Nowy, Otwórz, Zapisz | Importuj, Exportuj | Drukuj | Zamknij Wiadomość - Nowa, Odpowiedz nadawcy, Prześlij dalej Konto - Nowe, Właściwości Pomoc - Spis treści | O programie gdzie | to separator Toolbar: 5 przycisków (grafika na stronie 1.gif itd.) podpowiedzi (tooltipsy pod przyciskami): - Napisz wiadomość - Odpowiedz nadawcy - Odpowiedz wszystkim - Prześlij dalej - Wyślij i odbierz wszystkie Drzewo: Struktura taka jak na formatce Tabela: Struktura i zawartość taka jak na formatce Podglad: Zawartość taka jak na formatce Status: Zawartość taka jak na formatce 12