Laboratorium 4
W ramach laboratorium nr 4 przygotujemy aplikację do „programowania” i rysowania wielokątów, a przy okazji przećwiczymy wykorzystanie komponentów Java Swing. Jeśli uda się spełnić wszystkie wymagania funkcjonalne i techniczne, to będzie to bezdyskusyjne potwierdzenie, że macie umiejętności potrzebne do przygotowania interfejsu aplikacji w Waszym projekcie.
Zadanie : Program do rysowania wielokątów (5 pkt)
Wymagania funkcjonalne
Program rysuje wielokąt o podanej liczbie wierzchołków. Położenia wierzchołków mogą reprezentować wielokąty foremne lub być generowane losowo. Program umożliwia zmianę koloru linii, zmianę koloru tła i grubości linii.
Wymagania techniczne
- Wykorzystanie trzech różnych layoutów (np. BorderLayout, FlowLyout, GridLayout)
- Wykorzystanie 5 różnych typów komponentów JSwing (np. JRadioButton, JButton, JSlider, JColorChooser, JComboBox, JTextField).
- Co najmniej jedna klasa implementuje interfejs ActionListener.
- Aplikacja ma pasek menu (JMenu) z co najmniej dwiema opcjami do wyboru (np. różne grubości linii rysowanego wielokąta).
- Jedna z pozycji w menu powinna ukazywać okienko dialogowe z autorem zadania (imię, nazwisko, numer indeksu).
- Jedna z pozycji w menu powinna ukazywać okienko dialogowe z autorem zadania (imię, nazwisko, numer indeksu).
Punktacja:
- Stworzenie okna aplikacji i wykorzystanie trzech różnych layoutów – 0.5 pkt
- Wykorzystywanie pięciu komponentów różnych typów – 0.5 pkt
- Stworzenie i oprogramowanie paska menu – 1 pkt
- Narysowanie wielokąta o zadanej ilości wierzchołków - 1 pkt
- Oprogramowanie zdarzeń dla stworzonych komponentów – 2 pkt
Przykład implementacji
Uwaga - poniżej pokazany jest jedynie (zaawansowany) przykład. By zdobyć 5 punktów nie trzeba uwzględnić wszystkich zaprezentowanych funkcji (patrz wyżej na wymagania i punktację).
W przykładzie rysowanie wielokąta jest zdefiniowane przez:
-
punkt początkowy (w tym przypadku środek centralnego panelu)
-
ilość wierzchołków (ustawioną za pomocą JSlider)
-
Układ komponentów JRadioButton pozwala na narysowanie wielokąta foremnego lub losowe rozłożenie wierzchołków punktów.
-
Położenie wierzchołków można zmieniać w polach tekstowych na prawym panelu.
-
W menu można wybrać jedną z trzech zdefiniowanych grubości linii.
Wskazówki i przykłady
-
Do rysowanie wielokąta można wykorzystać klasę Polygon i metodę drawPolygon w klasie Graphics lub Graphics2D.
-
Do wyboru koloru tła i linii wygodnie jest wykorzystać klasę JColorChooser
-
Lista podstawowych komponentów Swing: http://web.mit.edu/6.005/www/sp14/psets/ps4/java-6-tutorial/components.html
-
Przykłady układów (Layout): https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
-
Zmiana grubości linii: https://docs.oracle.com/javase/tutorial/2d/geometry/strokeandfill.html
-
Jeśli w trakcie działania programu do okienka dodawane / usuwane są komponenty, należy wywołać również metody: repaint(); oraz revalidate(); Pierwsza z nich usuwa pozostałości po poprzedniej wersji GUI, a druga przelicza ponownie layout.
int lineWidth = 5; Graphics2D g2d = (Graphics2D) g; BasicStroke bs1 = new BasicStroke(lineWidth); g2d.setStroke(bs1);
- Wzór na położenie wierzchołków wielokąta foremnego o N wierzchołkach:
xk = R * cos((π/2 + 2*π*k) /N)
yk = R * sin((π/2 + 2*π*k) /N)
gdzie: 0<k<N, R - promień okręgu opisanego na wielokącie foremnym.