Trzynasta prezentacja do kursu “Wstęp do programowania” poświęcona wstępowi do tworzenia graficznych interfejsów użytkownika (GUI).
Ta strona jest częścią starego kursu Javy. Nowy kurs, pt. “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”, jest znacznie rozszerzony i dostosowany fo Javy 8. Jego forma jest także znacznie bardziej przystępna dla korzystających wyłącznie z treści on-line. Dostępne materiały znajdziesz tutaj.
Treść:
- Proste interfejsy graficzne z użyciem Swing,
- Rysowanie prostych figur geometrycznych
Zobacz też: Java – Proste GUI w Swing tworzone przy pomocy NetBeans IDE (14)
Pobierz prezentację w formacie .pdf
Żródła
Pierwsze okno
Tworzymy okno z dwoma przyciskami.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Przyciski { public static void main(String[] args) { // Tworzymy okno aplikacji JFrame ramka = new JFrame(); // Po zamknięciu okna, aplikacja ma zakończyc działanie ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Ustalamy rozmiar okna ramka.setSize(400, 300); // Tworzymy przycisk JButton witajButton = new JButton(); // Ustawiamy jaki tekst ma się wyświetlać na przycisku witajButton.setText("Witaj"); // Można od razu utworzyć przycisk i ustawić tekst JButton zegnajButton = new JButton("Żegnaj"); // Wstawiamy przycisk, umieszczając co po lewej ramka.getContentPane().add(BorderLayout.WEST, witajButton); // Wstawiamy przycisk, umieszczając co po prawej ramka.getContentPane().add(BorderLayout.EAST, zegnajButton); // Okno się wyświetla ramka.setVisible(true); } } |
Przyciski coś robią
Tym razem przyciski w naszej aplikacji coś robią (tzn. wypisują tekst)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import java.awt.BorderLayout; import java.awt.event.*; import javax.swing.*; public class PrzyciskiZAkcja implements ActionListener{ JFrame ramka; JButton witajButton; JButton zegnajButton; public static void main(String[] args) { PrzyciskiZAkcja przyciski = new PrzyciskiZAkcja(); przyciski.zbudujGUI(); } public void zbudujGUI() { ramka = new JFrame(); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.setSize(400, 300); witajButton = new JButton("Witaj"); zegnajButton = new JButton("Żegnaj"); // dodajemy do przycisków ActionListener witajButton.addActionListener(this); zegnajButton.addActionListener(this); ramka.getContentPane().add(BorderLayout.WEST, witajButton); ramka.getContentPane().add(BorderLayout.EAST, zegnajButton); ramka.setVisible(true); } public void actionPerformed(ActionEvent akcja) { // metoda obsługująca akcje if (akcja.getSource() == witajButton) System.out.println("Witaj robaczku!"); else if (akcja.getSource() == zegnajButton) System.out.println("Żegnaj robaczku!"); else // to się nie powinno wydarzyć ;-) System.out.println("Skontaktowali się ze mną kosmici"); } } |
Tekst w aplikacji
Wzbogacamy naszą aplikację w dwa komponenty służące do wprowadzania i wyświetlania tekstu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PrzyciskiITekst implements ActionListener{ JFrame ramka; JButton witajButton; JButton zegnajButton; JTextField textF; JLabel rezultatJL; public static void main(String[] args) { PrzyciskiITekst przyciski = new PrzyciskiITekst(); przyciski.zbudujGUI(); } public void zbudujGUI() { ramka = new JFrame(); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.setSize(400, 200); witajButton = new JButton(); witajButton.setText("Witaj!"); zegnajButton = new JButton("Żegnaj!"); witajButton.addActionListener(this); zegnajButton.addActionListener(this); JPanel jp = new JPanel(); jp.setLayout(new GridLayout(1,2)); jp.add(witajButton); jp.add(zegnajButton); JPanel jp2 = new JPanel(); jp2.setLayout(new GridLayout(3,1)); // tworzymy pole tekstowe z domyślnym tekstem textF = new JTextField("Wpisz swe imię przybyszu!"); // tworzymy pole na którym będzie wypisany tekst rezultatJL = new JLabel(); rezultatJL.setSize(400,20); jp2.add(textF); jp2.add(rezultatJL); jp2.add(jp); ramka.add(jp2); ramka.setVisible(true); } public void actionPerformed(ActionEvent akcja) { if (akcja.getSource() == witajButton) // modyfikujemy komponent, zmieniając tekst rezultatJL.setText(" Witaj "+textF.getText()); else if (akcja.getSource() == zegnajButton) // modyfikujemy komponent, zmieniając tekst rezultatJL.setText(" Żegnaj "+textF.getText()); else System.out.println("Skontaktowali się ze mną kosmici"); } } |
Rysujemy proste figury
Prosty program w którym tworzymy panel z przyciskami oraz rysujemy proste figury a także nieco bardziej złożony wzór fraktalopodobny używając rekurencji.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Rysunek implements ActionListener { JFrame ramka; JButton liniaButton; JButton kwadratButton; JButton koloButton; JButton wzorekButton; PanelRysunkowy rysunkowyP; public static void main(String[] args) { Rysunek rysunek = new Rysunek(); rysunek.zbudujGUI(); } public void zbudujGUI() { ramka = new JFrame(); ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ramka.setSize(400, 400); liniaButton = new JButton("Linia"); kwadratButton = new JButton("Kwadrat"); koloButton = new JButton("Kolo"); wzorekButton = new JButton("Wzorek"); liniaButton.addActionListener(this); kwadratButton.addActionListener(this); koloButton.addActionListener(this); wzorekButton.addActionListener(this); JPanel jp = new JPanel(); jp.setLayout(new BorderLayout()); rysunkowyP = new PanelRysunkowy(); JToolBar tb = new JToolBar(); tb.add(liniaButton); tb.add(kwadratButton); tb.add(koloButton); tb.add(wzorekButton); jp.add("Center", rysunkowyP); jp.add("North", tb); ramka.add(jp); ramka.setVisible(true); } public void actionPerformed(ActionEvent akcja) { // pobieramy z panelu rysunkoweg obiekt typu Graphics // - będziemy go uzywać do rysowania Graphics gr = rysunkowyP.getGraphics(); gr.clearRect(0, 0, 400, 400); if (akcja.getSource() == liniaButton) // Rysujemy linię gr.drawLine(20, 20, 200, 200); else if (akcja.getSource() == kwadratButton) { // Rysujemy prostokąt (tu kwadrat) gr.drawRect(20, 20, 220, 220); // Ustawiamy kolor wypełniania figur na niebieski gr.setColor(Color.BLUE); // Rysujemy prostokąt (tu kwadrat) z zaokrąglonymi rogami, wypełniony kolorem gr.fillRoundRect(50, 50, 100, 100, 40, 40);} else if (akcja.getSource() == koloButton) { // Ustawiamy kolor wypełniania figur na zielony gr.setColor(Color.GREEN); // Rysujemy owal (tu koło) wypełnione kolorem gr.fillOval(20, 20, 200, 200); } else if (akcja.getSource() == wzorekButton) // Rysujemy fraktalopodobną strukturę opartą na kołach malujWzorek(rysunkowyP, (int) rysunkowyP.getWidth() / 2, (int) rysunkowyP.getHeight() / 2, 200); else System.out.println("Skontaktowali się ze mną kosmici"); } public void malujWzorek(PanelRysunkowy pr, int x, int y, int r) { // można też tak się odwołać do grafiki w panelu rysunkowyP.getGraphics().drawOval(x - r / 2, y - r / 2, r, r); if (r > 1) { // wewnątrz metody odwołujemy się do tej samej metody - // jest to REKURENCJA malujWzorek(pr, x + r / 2, y, r / 2); malujWzorek(pr, x - r / 2, y, r / 2); } } } // Druga klasa w tym samym pliku! // Tak tez się da (czy się powinno tak robić to rzecz dyskusyjna) class PanelRysunkowy extends JPanel { public void paintComponent(Graphics g) { super.paintComponents(g); } } |
Taaaaaaaaaaaaaaaaak!
Brawo!
dobre komentarze do kodu :)