Henryk Budzisz ZPORR Koszalin 2009
Wykaz ćwiczeo Ćw.1. Przycisk zamykajacy Ćw.2. Strzałka blokowa Uwaga: Ćwiczenia wymagają zainstalowania środowiska programistycznego NetBeans.
Ćwiczenie 1 Zadania: zdefiniować komponent JavaBeans przycisk zamykający, dodać komponent do palety, przetestować jego użycie w przykładowej aplikacji.
Ćwiczenie 1 przygotowanie komponentu 1. Utworzyć nowy projekt typu Java Class Library o nazwie Komponenty (File/New Project). 2. Zdefiniować pakiet o nazwie komponenty (Projects/ Komponenty/Sourced Packages/New/Java Package). 3. W pakiecie komponenty utworzyć klasę Przycisk (New/Java Class). 4. Wykonać kompilację (Build Project) i sprawdzić w oknie Files, czy plik Komponenty,jar został utworzony. 5. Dodać komponent Przycisk do palety (Tools/Palette Manager /New Category:"komponenty"; Add from JAR i wskazać Komponeny.jar)
Ćwiczenie 1 - c.d: aplikacja testująca 1. Utworzyć nowy projekt typu Java Application o nazwie TestPrzycisku (File/New Project). Nie tworzyć klasy Main (!). 2. Utworzyć klasę typu JFrame Form o nazwie OknoTestowe. 3. Wykonać kompilację i przetestować uruchamianie. 4. W trybie Design przeciągnąć komponent Przycisk na formatkę. Rozwinąć drzewo projektu TestPrzycisku i w węźle Other Components odnaleźć przycisk1. Jest to komponent nie wizualny. Skasować go.
Ćwiczenie 1 c.d: rozbudowa komponentu Przycisk. 1. W klasie Przycisk dodać: import java.awt.*;...extends Button i po kompilacji przetestować na formatce i w przeglądarce właściwości (Window/Properties). 2. W konstruktorze dodać: setlabel(" "); i po kompilacji przetestować.
Ćwiczenie 1 c.d: rozbudowa komponentu Przycisk; funkcja paint. dodać funkcję paint: public synchronized void paint(graphics g) { Dimension d = getsize(); int szer = d.width-1; int wys = d.height-1; g.drawline(0,0, szer, wys); g.drawline(0, wys, szer, 0); i przetestować.
Ćwiczenie 1 c.d: zamykanie okna W trybie Design, wygenerować funkcję obsługującą zdarzenie ActionEvent komponentu Przycisk (z menu rozwijanego dla tego komponentu). W funkcji dodać: System.exit(0); Po kompilacji przetestować.
Ćwiczenie 2 Zadania: zdefiniować strzałkę blokową ( ) na bazie klasy java.awt.component, zdefiniować właściwość direction określającą kierunek strzałki i właściwy sposób odrysowania, dołączyć edytor właściwości direction, dodać ikonę do komponentu, przetestować komponent w przykładowej aplikacji.
Ćwiczenie 2 przygotowanie komponentu 1. Utworzyć nowy projekt typu Java Class Library o nazwie Komponenty (File/New Project). 2. Zdefiniować pakiet o nazwie komponenty (Projects/ Komponenty/Sourced Packages/New/Java Package). (pkt 1 i 2 można pominąć, jeżeli projekt i pakiet istnieją z poprzedniego ćwicz.) 3. W pakiecie komponenty utworzyć klasę BlockArrow (New/Java Class). 4. Wykonać kompilację (Build Project) i sprawdzić w oknie Files, czy plik Komponenty,jar został utworzony. 5. Dodać komponent BlockArrow do palety (Tools/Palette Manager /New Category:"komponenty"; Add from JAR i wskazać Komponenty.jar)
Ćwiczenie 2 c.d: rozbudowa komponentu BlockArrow. 1. W klasie BlockArrow dodać: import java.awt.*;...extends Component 2. Dodać funkcję paint public synchronized void paint(graphics g) { Dimension d = getsize(); int w = d.width-1; int h = d.height-1; int[] xpoints = {0,0,w; int[] ypoints = {h,0,h/2; g.fillpolygon(xpoints,ypoints,3); 3. Odbudować plik Komponenty.jar
Ćwiczenie 2 - c.d: aplikacja testująca 1. Utworzyć nowy projekt typu Java Application o nazwie BlockArrowTest (File/New Project). Nie tworzyć klasy Main (!). 2. Utworzyć klasę typu JFrame Form o nazwie ArrowTestWindow. 3. Wykonać kompilację i przetestować uruchamianie. 4. W trybie Design przeciągnąć komponent BlockArrow na formatkę. Powiększyć komponent i zmienić kolor (odziedziczona właściwość foreground).
Ćwiczenie 2 poprawianie wyglądu komponentu. W konstruktorze klasy BlockArrow dodać: setpreferredsize(new Dimension(30,30)); setforeground(color.cyan); odbudować plik Komponenty.jar i przetestować komponent na formatce.
Ćwiczenie 2 definiowanie kierunków strzałki blokowej W pakiecie komponenty utworzyć klasę ArrowDirection (New/Java Class). Zmodyfikować tekst klasy do postaci: package komponenty; public enum ArrowDirection { LEFT, RIGHT, UP, DOWN; Odbudować plik Komponenty.jar.
Ćwiczenie 2 definiowanie właściwości direction typu ArrowDirection 1. W klasie BlockArrow dodać deklaracje pól: private ArrowDirection direction; private PropertyChangeSupport propertychangesupport; 2. W konstruktorze dodać: propertychangesupport = new PropertyChangeSupport(this); direction = ArrowDirection.RIGHT; 3. Zdefiniować getter i setter: public ArrowDirection getdirection() { return direction; public void setdirection(arrowdirection direction) { ArrowDirection olddirection = this.direction; this.direction = direction; propertychangesupport.firepropertychange ("direction", olddirection, direction);
Ćwiczenie 2 definiowanie funkcji rejestrujących słuchaczy zmian właściwości public void addpropertychangelistener(propertychangelistener l) { propertychangesupport.addpropertychangelistener(l); public void removepropertychangelistener(propertychangelistener l){ propertychangesupport.removepropertychangelistener(l); Odbudować plik Komponenty.jar i przetestować komponent BlockArrow, zwracając uwagę na właściwość direction.
Ćwiczenie 2 edytor właściwości direction typu ArrowDirection 1. W pakiecie komponenty utworzyć klasę ArrowDirectionEditor (New/Java Class). 2. Dodać: import java.beans.*; 3. Zmodyfikować nagłówek klasy do postaci: public class ArrowDirectionEditor extends PropertyEditorSupport 4. Zarejestrować edytor właściwości dodać w konstruktorze: PropertyEditorManager.registerEditor( getclass(),arrowdirection.class);
Ćwiczenie 2 edytor właściwości direction typu ArrowDirection c.d. W klasie ArrowDirectionEditor zdefiniować funkcję: public String[] gettags() { ArrowDirection[] ad = ArrowDirection.values(); String[] str = new String[ad.length]; for (int i=0; i<ad.length; i++) str[i] = ad[i].tostring(); return str; i przetestować ustawianie właściwości direction.
Ćwiczenie 2 edytor właściwości direction typu ArrowDirection c.d. W klasie ArrowDirectionEditor zdefiniować funkcję: public void setastext(string text) throws IllegalArgumentException { setvalue(arrowdirection.valueof(text)); i przetestować ustawianie właściwości direction.
Ćwiczenie 2 poprawienie rysowania strzałki (klasa BlockArrow) public synchronized void paint(graphics g) { Dimension d = getsize(); int w = d.width-1; int h = d.height-1; int[] xpoints = {0,0,w; int[] ypoints = {h,0,h/2; switch (direction) { // default direction is RIGHT case LEFT: xpoints = new int[]{w,w,0; // ypoints - no change case UP: break; xpoints = new int[]{w,0,w/2; ypoints = new int[]{h,h,0; break; case DOWN: xpoints = new int[]{w,0,w/2; ypoints = new int[]{0,0,h; g.fillpolygon(xpoints,ypoints,3);
Ćwiczenie 2 ikona komponentu Przy użyciu edytora graficznego (np. Paint) zaprojektować ikonę 16x16 pikseli i zapisać w pliku BlockArrowIcon.gif w katalogu zawierającym wersje źródłowe komponentów.
Ćwiczenie 2 tworzenie klasy informacyjnej BlockArrowBeanInfo 1. W pakiecie komponenty utworzyć klasę ArrowDirectionBeanInfo (New/Java Class). 2. Zmodyfikować tekst klasy do postaci: public class BlockArrowBeanInfo extends java.beans.simplebeaninfo { public java.awt.image geticon(int iconkind) { return loadimage( "/komponenty/blockarrowicon.gif"); 3. Komponent na nowo dodać do palety.