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

Podobne dokumenty
Programowanie Obiektowe Java

Programowanie Obiektowe Java

Tworzenie i obsługa graficznego interfejsu uŝytkownika

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

Java biblioteka Swing

Java - interfejs graficzny

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

Programowanie obiektowe

Programowanie zdarzeniowe

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

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

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

Graphic User Interfaces pakiet Swing

Podstawy Języka Java

Programowanie graficznych interfejsów użytkownika

PWŚG Ćwiczenia 13. Ukończoną pracę należy przesłać na adres lub

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

Programowanie w języku Java

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

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

Programowanie obiektowe

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

SWING. dr Jarosław Skaruz

Programowanie w języku Java

Kontenery i komponenty graficzne

4. W konstruktorze klasy Grafika wywołaj metodę określającą rozmiary ramki oraz ustaw kolor tła metodą setbackground():

Interfejs graczny w Javie.

Tworzenie elementów graficznych

Języki i metody programowania Java INF302W Wykład 5

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Programowanie w języku Java WYKŁAD

LABORATORIUM 7 Cel: 1_1

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

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

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

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

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

1. Zakładanie projektu Katalog typu Java Class Library do przechowywania obiektowego modelu danych projekt należy do warstwy biznesowej

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

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

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

JAVA 2: PROGRAMY Z GRAFICZNYM INTERFEJSEM UŻYTKOWNIKA 1. WSTĘP

Klasy i obiekty cz II

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

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

Podstawy Swing. Tomasz Borzyszkowski

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

Aplikacja wielowątkowa prosty komunikator

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

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

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

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

Programowanie zdarzeniowe

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Języki i metody programowania Java Lab6 Budowa interfejsu graficznego użytkownika (GUI Graphical User Interfaces) z wykorzystaniem pakietu Swing

Terminarz na sezon 2014/2015 (zaznaczono główny termin sobotni) 1 kolejka 19 lipca

Kurs programowania 2 - listy

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

Programowanie zdarzeniowe

Aplikacja wielow tkowa prosty komunikator

Obsługa zdarzeń. Wykład 4

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

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

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

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Wykład 12: Obsługa Zdarzeń

Języki i metody programowania Java Lab6 Budowa interfejsu graficznego użytkownika (GUI Graphical User Interfaces) z wykorzystaniem pakietu Swing

GUI - projektowanie interfejsów cz. II

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

Scenariusz Lekcji. Część organizacyjna:

INSTRUKCJA DO ĆWICZENIA 5

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

9. Swing wprowadzenie

Tworzymy projekt File->New Project->Java Application, przy czym tym razem odznaczamy create main class

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

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

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Iteracyjno-rozwojowy cykl oprogramowania 4

Programowanie obiektowe

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

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

Ćwiczenia 9 - Swing - część 1

Programowanie komponentowe

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

Programowanie obiektowe i zdarzeniowe

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Laboratorium z informatyki sem.iii/ćw. 4 Wydział Transportu PW /19

Programowanie Obiektowe GUI

Programowanie Obiektowe Java

Języki i metody programowania Java Lab2 podejście obiektowe

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

Przykładowe roz wiązanie:

Języki i metody programowania Java INF302W Wykład 2 (część 1)

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

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Laboratorium z informatyki sem. III/ćw. 2 Wydział Transportu PW /19 MATERIAŁY POMOCNICZE DO ĆWICZENIA 2

Aplikacje w Javie wykład 12 Programowanie GUI

Transkrypt:

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

JTextFieldDemo.java JTextField pole2 = new JTextField( wpisz cos i wcisnij Enter"); JTextField pole2 = new JTextField(20); JTextField pole3 = new JTextField("zmien ten tekst"); JTextField pole4 = new JTextField(20); pole1.addactionlistener(pole1listener); pole3.addkeylistener(pole3listener); //pole3.addkeylistener(pole3adapter); add(pole1); add(pole2); add(pole3); add(pole4);

JTextFieldDemo.java ActionListener pole1listener = new ActionListener() { public void actionperformed(actionevent e) { pole2.settext( pole1.gettext()) ; ; KeyListener pole3listener = new KeyListener() { @Override public void keytyped(keyevent e) { @Override public void keyreleased(keyevent e) { pole4.settext( pole3.gettext()) ; ; @Override public void keypressed(keyevent e) {

JTextFieldDemo.java // Jesli nie wszystkie metody z KeyListener sa wykorzystane // bardziej przejrzystej jest korzystanie z KeyAdaptera // implementujacego wybrane metody: KeyListener pole3adapter = new KeyAdapter() { public void keyreleased(keyevent e) { pole4.settext( pole3.gettext()) ; ; Inne przykłady adapterów: MouseAdapter (zamiast MouseListener) MouseMotionAdapter (zamiast MouseMotionListener) WindowAdapter (zamiast WindowListener)

JCheckBoxDemo.java JCheckBox cb1 = new JCheckBox("Pole wyboru 1"); JCheckBox cb2 = new JCheckBox("Pole wyboru 2"); JCheckBox cb3 = new JCheckBox("Pole wyboru 3"); cb1.addactionlistener(cblistener); cb2.addactionlistener(cblistener); cb3.addactionlistener(cblistener); Panel panelcheckbox = new JPanel(); panelcheckbox.setlayout(new FlowLayout(FlowLayout.LEFT)); panelcheckbox.add(cb1); panelcheckbox.add(cb2); panelcheckbox.add(cb3);

JCheckBoxDemo.java ActionListener cblistener = new ActionListener() { public void actionperformed(actionevent e) { Object obj = e.getsource(); if (obj == cb1) if (cb1.isselected()) t.append("pole 1 ustawione\n"); else t.append("pole 1 wyczyszczone\n"); if (obj == cb2) if (cb2.isselected()) t.append("pole 2 ustawione\n"); else t.append("pole 2 wyczyszczone\n"); if (obj == cb3) if (cb3.isselected()) t.append("pole 3 ustawione\n"); else t.append("pole 3 wyczyszczone\n"); ; Przykład obsługi kilku CheckBox ów w jednym interfejsie

JRadioButtonDemo.java ButtonGroup grupa = new ButtonGroup(); JRadioButton rb1 = new JRadioButton("jeden", false), rb2 = new JRadioButton("dwa", false), rb3 = new JRadioButton("trzy", false); // Grupowanie obektow JRadioButton do ButtonGroup //- tylko jeden moze byc zaznaczony grupa.add(rb1); grupa.add(rb2); grupa.add(rb3); rb1.addactionlistener(listener); rb2.addactionlistener(listener); rb3.addactionlistener(listener); add(rb1); add(rb2); add(rb3); ActionListener listener = new ActionListener() { public void actionperformed(actionevent e) { etykieta.settext("przycisk wyboru " + ((JRadioButton)e.getSource()).getText()); ;

JComboBoxDemo.java String[] description = { "Bialy", "Zolty", "Czerwony", "Niebieski", ; JTextField poletekstowe = new JTextField("Wpisz nazwe nowej pozycji"); JComboBox combobox = new JComboBox(description); JButton przycisk = new JButton("Dodaj pozycje"); JLabel etykieta = new JLabel();

JComboBoxDemo.java String[] description = { "Bialy", "Zolty", "Czerwony", "Niebieski", ; JTextField poletekstowe = new JTextField("Wpisz nazwe nowej pozycji"); JComboBox combobox = new JComboBox(description); JButton przycisk = new JButton("Dodaj pozycje"); JLabel etykieta = new JLabel(); combobox.addactionlistener(new ActionListener() { public void actionperformed(actionevent e){ etykieta.settext("indeks: "+ combobox.getselectedindex() + " " + combobox.getselecteditem()); if (combobox.getselecteditem().equals("bialy")) etykieta.settext("wybrano kolor Bialy"); add(combobox);

JComboBoxDemo.java String[] description = { "Bialy", "Zolty", "Czerwony", "Niebieski", ; JTextField poletekstowe = new JTextField("Wpisz nazwe nowej pozycji"); JComboBox combobox = new JComboBox(description); JButton przycisk = new JButton("Dodaj pozycje"); JLabel etykieta = new JLabel(); combobox.addactionlistener(new ActionListener() { public void actionperformed(actionevent e){ etykieta.settext("indeks: "+ combobox.getselectedindex() + " " + combobox.getselecteditem()); if (combobox.getselecteditem().equals("bialy")) etykieta.settext("wybrano kolor Bialy"); add(combobox); przycisk.addactionlistener(new ActionListener() { public void actionperformed(actionevent e){ if (poletekstowe.gettext()!= "") combobox.additem(poletekstowe.gettext()); etykieta.settext("dodano: " + poletekstowe.gettext()); );

JSliderDemo.java JSlider redslider,greenslider,blueslider; redslider = new JSlider(); redslider.setminimum(0); redslider.setmaximum(255); redslider.setvalue(127); greenslider = new JSlider(0,255,127); blueslider = new JSlider(JSlider.HORIZONTAL, 0, 255, 127); redslider.addchangelistener(sliderslistener); greenslider.addchangelistener(sliderslistener); blueslider.addchangelistener(sliderslistener); add(new JLabel("Red:")); add(redslider); add(new JLabel("Green:")); add(greenslider); add(new JLabel("Blue:")); add(blueslider);

JPanel panel = new JPanel(); JSliderDemo.java ChangeListener sliderslistener = new ChangeListener() { ; @Override public void statechanged(changeevent e) { int red = redslider.getvalue(); int green = greenslider.getvalue(); int blue = blueslider.getvalue(); panel.setbackground(new Color(red, green, blue));

JTabbedPaneDemo.java JTabbedPane tabbedpane = new JTabbedPane(); JPanel panel1 = new JPanel(new FlowLayout()); JPanel panel2 = new JPanel(new FlowLayout()); JPanel panel3 = new JPanel(new FlowLayout()); tabbedpane.addtab("tytul 1", panel1); tabbedpane.addtab("tytul 2", panel2); tabbedpane.addtab("tytul 3", panel3); add(tabbedpane); // tabbedpane.remove(panel2);

JEditorPaneDemo.java JEditorPane edytor = new JEditorPane(); edytor.seteditable(false); try { URL link = new URL("http://jakasstrona.html"); edytor.setpage(link); catch(ioexception e) { edytor.settext("wyjatek:"+e); add(new JScrollPane(edytor));

JMenuBar menubar; JMenu menu; JMenuDemo.java JMenuItem menuitem; final JRadioButtonMenuItem rbmenuitem; final JCheckBoxMenuItem cbmenuitem // Tworzenie paska menu menubar = new JMenuBar(); //Dodawanie menu: menu = new JMenu("Menu glowne"); menubar.add(menu); menuitem = new JMenuItem("Pierwsza pozycja"); menu.add(menuitem); rbmenuitem = new JRadioButtonMenuItem("Pozycja menu z JRadioButton"); rbmenuitem.setselected(true); menu.add(rbmenuitem); cbmenuitem = new JCheckBoxMenuItem("Pozycja menu z JCheckBoox"); menu.add(cbmenuitem); setjmenubar(menubar);

JMenuBar menubar; JMenu menu; JMenuDemo.java JMenuItem menuitem; final JRadioButtonMenuItem rbmenuitem; final JCheckBoxMenuItem cbmenuitem // Tworzenie paska menu menubar = new JMenuBar(); //Dodawanie menu: menu = new JMenu("Menu glowne"); menubar.add(menu); menuitem = new JMenuItem("Pierwsza pozycja"); menu.add(menuitem); rbmenuitem = new JRadioButtonMenuItem("Pozycja menu z JRadioButton"); rbmenuitem.setselected(true); menu.add(rbmenuitem); cbmenuitem = new JCheckBoxMenuItem("Pozycja menu z JCheckBoox"); menu.add(cbmenuitem); setjmenubar(menubar);

JMenuDemo.java // dodawanie akcji do elementow menu analogicznie jak dla komponentow: menuitem.addactionlistener(new ActionListener() { // Przyklad wykorzystania html w etykiecie Jlabel // niemal każdy komponent Swing wyświetlający String można formatować html public void actionperformed(actionevent e) { etykieta.settext( "<html>\n" + "Wybrano pierwsza pozycje menu " + "<ul>\n" + "<li><font color=red>stan JRadioButton'a: </font>\n" + rbmenuitem.isselected() + "<li><font color=blue>stan JCheckBox'a: </font>\n" + cbmenuitem.isselected() + "</ul>\n"+ "W tej etykiecie JLabel wykorzystano kod HTML"+ "</html>"); );

JMenuDemo.java rbmenuitem.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { etykieta.settext( "Zmieniono stan JRadioButton'a: " + rbmenuitem.isselected() ); ); cbmenuitem.additemlistener(new ItemListener() { @Override public void itemstatechanged(itemevent e) { etykieta.settext( "Zmieniono stan JCheckBox'a: " + cbmenuitem.isselected() ); );

JMenuDemo2.java

JOptionPaneDemo.java

JOptionPaneDemo.java b1.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { int n = JOptionPane.showConfirmDialog( getparent(), "Tresc pytania?", "Tytul okna z pytaniem", JOptionPane.YES_NO_OPTION); ); if (n == JOptionPane.YES_OPTION) { etykieta.settext("wybrano TAK"); else if (n == JOptionPane.NO_OPTION) { etykieta.settext("wybrano NIE"); else { etykieta.settext("nic nie wybrano - zamknieto okno dialogu");

JOptionPaneDemo.java b2.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { JOptionPane.showMessageDialog( f, "Komunikat bledu!", "Tytul okna z komunikatem bledu", JOptionPane.ERROR_MESSAGE); );

JOptionPaneDemo.java Object[] options = {"Oczywiscie", Zdecydowanie nie", "Innym razem..."; int n = JOptionPane.showOptionDialog(f, "Pytanie z opcjami wyboru Tak/Nie/Anuluj " + "z wlasnym opisem przyciskow", "Tytul okna z pytaniem...", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[2]);

JOptionPaneDemo.java if (n == JOptionPane.YES_OPTION) { etykieta.settext("wybrano: Oczywiscie"); else if (n == JOptionPane.NO_OPTION) { etykieta.settext("wybreano: Zdecydowanie nie"); else if (n == JOptionPane.CANCEL_OPTION) { etykieta.settext("wybrano: Innym razem..."); else { etykieta.settext("nic nie wybrano");

JOptionPaneDemo.java Object[] wartosciwyboru = { "Opcja1", "Opcja2", "Opcja3" ; Object selectedvalue = JOptionPane.showInputDialog( JOptionPaneDemo.this, "Wybierz jedna opcje:", "Tytul okno wprowadzania", JOptionPane.INFORMATION_MESSAGE, null, wartosciwyboru, wartosciwyboru[0]); etykieta.settext((string)selectedvalue);

JOptionPaneDemo.java JOptionPane.showMessageDialog(null, "Komunikat okna z ostrzezeniem" + "\n\n Podobnie jak pozostale okna" + " moze zawierac kilka linii... ", "Tytul ostrzezenia", JOptionPane.WARNING_MESSAGE);

JOptionPaneDemo.java String s = (String)JOptionPane.showInputDialog( f, "Wpisz jakis tekst:\n", "Tytul okna...", JOptionPane.PLAIN_MESSAGE, null, null, "tekst domyslny"); JOptionPane.showMessageDialog(f, "Wpisales: \n" + s);

JOptionPaneDemo.java int n = JOptionPane.showConfirmDialog( f, "Na pewno zakonczyc?", "Potwierdzenie zakonczenia programu", JOptionPane.YES_NO_OPTION); if (n == JOptionPane.YES_OPTION) dispose();

JListDemo.java String[] nazwydruzyn = { "Legia Warszawa", "Lech Poznan", "Polonia Warszawa", "Slask Wroclaw", "Gornik Zabrze", "Lechia Gdansk", "Zaglebie Lubin", "Piast Gliwice", "Wisla Krakow", "Jagiellonia Bialystok", "Korona Kielce", "Widzew Lodz", "Pogon Szczecin", "Ruch Chorzow", "Podbeskidzie Bielsko-Biala", "GKS Belchatow"; DefaultListModel listaelementy = new DefaultListModel(); JList lista = new JList(listaElementy); for (int i=0; i < nazwydruzyn.length; i++) listaelementy.addelement(nazwydruzyn[i]); lista.addlistselectionlistener(listalistener); lista.setvisiblerowcount(5); //Dodawanie JScrollPane: JScrollPane listscrollpane = new JScrollPane(lista); listscrollpane.setpreferredsize( new Dimension(300,100)); //add(lista, BorderLayout.CENTER); add(listscrollpane, BorderLayout.CENTER);

JListDemo.java ListSelectionListener listalistener = new ListSelectionListener() { ; public void valuechanged(listselectionevent e) { if (e.getvalueisadjusting()) return; System.out.println("Zaznaczone elementy listy:"); for (Object wybrane : lista.getselectedvalueslist()) System.out.println(wybrane);

JListDemo.java JButton usunelementy = new JButton("Usun wybrane elementy"); JTextField poledodawania = new JTextField("Wpisz nowy element i wcisnij ENTER"); usunelementy.addactionlistener(usuwanieelementow); poledodawania.addactionlistener(dodawanieelementow); ActionListener usuwanieelementow = new ActionListener() { @Override public void actionperformed(actionevent e) { for (Object wybrane : lista.getselectedvalueslist()) listaelementy.removeelement(wybrane); ; ActionListener dodawanieelementow = new ActionListener() { @Override public void actionperformed(actionevent e) { listaelementy.addelement(poledodawania.gettext()); ;

Rysowanie.java Każdy komponent posiada metodę paintcomponent(graphics g), którą można zmodyfikować w klasach pochodnych, np.: class MyPanel extends JPanel { private int squarex = 10; private int squarey = 20; private int squarew = 100; private int squareh = 100; public Dimension getpreferredsize() { return new Dimension(250,200); protected void paintcomponent(graphics g) { super.paintcomponent(g); g.setcolor(color.yellow); g.fillrect(squarex,squarey,squarew,squareh); g.setcolor(color.black); g.drawrect(squarex,squarey,squarew,squareh);

Rysowanie.java public Dimension getpreferredsize() { return new Dimension(250,200); Metoda getpreferredsize() została przedefioniowana, żeby ustalać preferowany rozmiar tworzonego panelu rysowania (wykorzystywane przez niektórych zarządców rozmieszczenia komponentów layout managers)

RysowanieMysz.java Dodając do tak stworzonego panelu interfejs obsługi zdarzeń myszy można rysować prostokąty o rozmiarach definiowanych myszą public MyPanel() { addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { squarex = e.getx(); squarey = e.gety(); repaint();

RysowanieMysz.java Dodając obsługę puszczenia klawisza myszy można definiować rozmiar komponentu: addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { squarex = e.getx(); squarey = e.gety(); ); public void mousereleased(mouseevent e) { if (e.getx() > squarex) squarew = e.getx() - squarex; else { squarew = squarex - e.getx(); squarex = e.getx(); if (e.gety() > squarey) squareh = e.gety() - squarey; else { squareh = squarey - e.gety(); squarey = e.gety(); repaint();

RysowanieMysz2.java Tak utworzony panel z opcją rysowania przy pomocy myszy jest traktowany jak każdy inny komponent Swing, może być wielokrotnie wykorzystany:

RysowanieMysz2.java JFrame f = new JFrame("Kilka obiektow MyPanel() wyswietlanych jednoczesnie"); f.setdefaultcloseoperation(jframe.exit_on_close); f.setlayout(new GridLayout(3,3,10,10)); MyPanel[] panele = new MyPanel[9]; for (int i=0; i<9; i++){ panele[i] = new MyPanel(); panele[i].setbackground(new Color(i*12)); f.add(panele[i]); f.pack();

RysowanieMysz3.java Poprzedni przykład można zmodyfikować tak, aby rysowane było kilka elementów, których współrzędne są przechowywane w tablicach: class MyPanel3 extends JPanel { private int MAKSYMALNA_LICZBA_ELEMENTOW = 5; private int[] x = new int [MAKSYMALNA_LICZBA_ELEMENTOW]; private int[] y = new int [MAKSYMALNA_LICZBA_ELEMENTOW]; private int licznikklikniec = 0; // (... konstrukor i inne metody...) protected void paintcomponent(graphics g) { super.paintcomponent(g); for (int i = 0; i<licznikklikniec; i++){ g.filloval(x[i], y[i], 40, 40); g.drawstring(""+i, x[i], y[i]);

RysowanieMysz3.java Poprzedni przykład można zmodyfikować tak, aby rysowane było kilka elementów, których współrzędne są przechowywane w tablicach: public MyPanel3() { addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { if (licznikklikniec < MAKSYMALNA_LICZBA_ELEMENTOW){ x[licznikklikniec] = e.getx(); y[licznikklikniec] = e.gety(); licznikklikniec++; repaint(); else{ //Przekroczona dopuszczalna ilosc klikniec.. if (e.getbutton() == MouseEvent.BUTTON3) wyczyscelementy(); //obsluga prawego klawisza myszy );

RysowanieMysz3.java

Podejście obiektowe Stwórzmy klasę Prostokąt, która będzie miała zdefiniowane rozmiary i położenie i sama będzie odpowiedzialna za rysowanie public class Prostokat { int xpos = 0, ypos = 0; int width = 0, height = 0; Color color = Color.BLACK; public void paint(graphics g){ g.setcolor(color); g.fillrect(xpos,ypos,width,height); Metoda paint(graphics g) otrzyma referencje do obiektu Graphics pewnego komponentu, na który będzie nadrysowany prostokąt.

public class Prostokat { //( ) deklaracja pól Podejście obiektowe public void paint(graphics g){ g.setcolor(color); g.fillrect(xpos,ypos,width,height); Przykład tworzenia i rysowania obiektu Prostokat w innym komponencie: public void paintcomponent(graphics g) { super.paintcomponent(g); Prostokat prostokat = new Prostokat(); prostokat.setx( e.getx() ); prostokat.sety( e.gety() ); prostokat.setwidth(50); prostokat.setheight(50); prostokat.paint(g);

Podejście obiektowe Dodajmy do klasy Prostokąt metody ustawiające i pobierające wartości pól w Eclipse: menu Source a potem : Generate getters and setters :

Podejście obiektowe Dodajmy do klasy Prostokąt metody ustawiające i pobierające wartości pól w Eclipse: menu Source a potem : Generate getters and setters : Dodane zostały automatycznie metody: public int getxpos() { return xpos; public void setxpos(int xpos) { this.xpos = xpos; public int getypos() { return ypos; public void setypos(int ypos) { this.ypos = ypos; public int getwidth() { return width; public void setwidth(int width) { this.width = width; public int getheight() { return height; public void setheight(int height) { this.height = height; public Color getcolor() { return color; public void setcolor(color color) { this.color = color;

RysowanieMysz4.java class MyPanel4 extends JPanel { Prostokat prostokat = new Prostokat(); public MyPanel4() { addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { prostokat.setx( e.getx() ); prostokat.sety( e.gety() ); prostokat.setwidth(50); prostokat.setheight(50); repaint(); ); public void paintcomponent(graphics g) { super.paintcomponent(g); prostokat.paint(g);

RysowanieMysz5.java addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { if (e.getbutton() == MouseEvent.BUTTON3) licznikklikniec=0; tablicaprostokatow[licznikklikniec] = new Prostokat(); tablicaprostokatow[licznikklikniec].setx( e.getx() ); tablicaprostokatow[licznikklikniec].sety( e.gety() ); tablicaprostokatow[licznikklikniec].setwidth(50); tablicaprostokatow[licznikklikniec].setheight(50); tablicaprostokatow[licznikklikniec].setcolor( new Color((float)Math.random(), (float)math.random(),(float)math.random())); licznikklikniec++; repaint(); );

RysowanieMysz5.java Można utworzyć tablicę elementów klasy Prostokąt, do której po kliknięciu myszy dodawany byłby nowy element: class MyPanel5 extends JPanel { private int MAKSYMALNA_LICZBA_ELEMENTOW = 5; Prostokat[] tablicaprostokatow = new Prostokat[MAKSYMALNA_LICZBA_ELEMENTOW]; private int licznikklikniec = 0; // (obsluga zdarzen myszy...) public void paintcomponent(graphics g) { super.paintcomponent(g); for(int i = 0; i<licznikklikniec; i++){ tablicaprostokatow[i].paint(g);

RysowanieMysz5.java Dodawanie obiektów do tablicy ma pewną istotną wadę trzeba znać z góry maksymalną dopuszczalną liczbę elementów. Ograniczenie to można ominąć stosując tzw. Kolekcje, o których na następnym wykładzie