Java i grafika (II)

package listy;

...

public class Lista extends JComboBox {

public Lista() {

Dimension rozmiar = new Dimension(100,27);

setPreferredSize(rozmiar);

Color tlo = new Color(51,102,153);

setBackground(tlo);

Color kolor_czcionki = new Color(255,255,255);

setForeground(kolor_czcionki);

Border krawedz = BorderFactory.createEtchedBorder();

setBorder(krawedz);

setEditable(false);

addItem("czarny");

addItem("biały");

...

addItem("zielony");

}

}

Oprócz standardowych operacji ustalających wygląd listy, w konstruktorze wywołaliśmy też metodę setEditable() z wartością false, aby zablokować użytkownikowi możliwość wprowadzania zmian na liście oraz wielokrotnie wywołaliśmy metodę addItem() do jej wypełnienia. Następnie w klasie Okno tworzymy obiekt klasy Lista i dołączamy go do panelu okna.

lista = new Lista();

panel.add(lista);

Trzeci komponent panelu to przycisk. Aby zachować jednolitą kolorystykę komponentów, nie możemy utworzyć obiektu klasy JButton. Tworzymy zatem klasę pochodną Przycisk rozszerzającą klasę JButton. Klasę Przycisk umieszczamy w pakiecie przyciski:

package przyciski;

...

public class Przycisk extends JButton {

public Przycisk() {

Dimension rozmiar = new Dimension(220,27);

setPreferredSize(rozmiar);

Color tlo = new Color(51,102,153);

setBackground(tlo);

Color kolor_czcionki = new Color(255,255,255);

setForeground(kolor_czcionki);

setText("zatwierdź zmianę koloru figury");

Border krawedz = BorderFactory.createEtchedBorder();

setBorder(krawedz);

}

}

Po utworzeniu nowej klasy pozostaje wrócić do klasy Okno, utworzyć obiekt klasy Przycisk i dodać go do panelu.

Przycisk przycisk = new Przycisk();

panel.add(przycisk);

Trzeba też podłączyć do niego procedurę obsługi zdarzenia. Podobnie jak w przypadku elementów menu, posłużymy się metodą addActionListener().

przycisk.addActionListener(

new ActionListener() {

public void actionPerformed(ActionEvent ev) {

kolorf = (String)lista.getSelectedItem();

if (kolorf.equals("czarny")) {

kfigury = new Color(0,0,0); }

else if (kolorf.equals("biały")) {

kfigury = new Color(255,255,255); }

...

else if (kolorf.equals("zielony")) {

kfigury = new Color(0,255,0); }

repaint();

}

}

);

W powyższej procedurze obsługi zdarzenia wykorzystujemy metodę getSelectedItem() do pobrania z listy rozwijanej aktualnie wybranego elementu, a następnie wykonujemy rzutowanie uzyskanej wartości typu Object na typ String, aby przypisać ją do zmiennej kolorf.

Następnie za pomocą instrukcji warunkowej sprawdzamy, który z kolorów został wybrany i przypisujemy odpowiednią wartość zmiennej kfigury, która została zadeklarowana na początku klasy i domyślnie przechowuje kolor czarny.

private Color kfigury = new Color(0,0,0);

Ostatnia instrukcja repaint() spowoduje odmalowanie panelu, wywołanie jego metody paintComponent(), która z kolei wywoła funkcję namaluj(). A ponieważ metoda namaluj() korzysta ze zmiennej kfigury, figura zostanie namalowana i wypełniona wybranym właśnie kolorem:

...

g2.setColor(kfigury);

g2.draw(figu);

g2.setPaint(kfigury);

g2.fill(figu);

...

Kod gotowego programu i skompilowana aplikacja dostępne są w miniportalu PCWK_PROG na naszych płytach CD. Za miesiąc pokażemy, jak za pomocą plików JAR przygotować nasz program do samodzielnego uruchamiania bez używania okna konsoli oraz jak automatycznie wygenerować dla niego dokumentację.