Java i grafika

Budowa aplikacji wyposażonych w GUI w Javie nie musi się opierać tylko na wykorzystywaniu standardowych elementów graficznych. Java udostępnia uporządkowany, obiektowy interfejs do funkcji graficznych, który pozwala wygodnie generować dowolną grafikę.

Budowa aplikacji wyposażonych w GUI w Javie nie musi się opierać tylko na wykorzystywaniu standardowych elementów graficznych. Java udostępnia uporządkowany, obiektowy interfejs do funkcji graficznych, który pozwala wygodnie generować dowolną grafikę.

Zanim zajmiemy się funkcjami graficznymi, musimy przygotować prostą aplikację okienkową. Pierwszym etapem będzie, jak zwykle, utworzenie okna, w którym można umieszczać grafikę. Implementujemy zatem klasę Okno dziedziczącą ze znanej już nam klasy JFrame. Implementację klasy Okno umieszczamy w pakiecie o nazwie okna.

public class Okno extends JFrame {

// tu będą deklaracje zmiennych

Okno() {

setSize(450,350);

setTitle("Grafika w Javie.");

setResizable(false);

ImageIcon obraz = new ImageIcon("kola.png");

Image rysunek = obraz.getImage();

setIconImage(obraz);

...

}

...

}

Na początku klasy Okno deklarujemy też zmienne, z których będziemy korzystać w dalszej części programu.

private Pasek pasek;

private MenuRoz figura, kolor;

private MenuElem kwadrat, prostokat, kolo, elipsa;

private MenuElem katp, kato, katr;

private MenuElem zielony, pomaranczowy;

private MenuElem blekit, fiolet;

private PanelOkna panel;

private RectangularShape figur =

new Rectangle2D.Double();

private String napis = "";

private String kolorf = "";

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

private JLabel kolorfigury;

private Lista lista;

Następnie w konstruktorze ustalamy parametry okna za pomocą metod setSize, setTitle i setResizable. Ostatnia z nich, wywołana z wartością false, uniemożliwi użytkownikowi zmianę rozmiaru okna. Niewywołanie tej metody jest równoznaczne z przekazaniem wartości true.

Okno z ikoną

Obrazek, z którego została utworzona ikona na pasku tytułu okna.

Obrazek, z którego została utworzona ikona na pasku tytułu okna.

Kolejny element, który dołączyliśmy do okna, to ikona znajdująca się na jej pasku tytułu, widoczna również po zminimalizowaniu okna. Do jej utworzenia posłuży metoda setIconImage(), której przekazujemy obiekt typu Image. Najpierw jednak powinniśmy za pomocą klasy ImageIcon załadować obrazek, przekazując do jej konstruktora nazwę pliku o rozszerzeniu .png, .gif, .jpg, ewentualnie razem ze ścieżką dostępu.

ImageIcon obraz = new ImageIcon("okna/kola.png");

Następnie za pomocą metody getImage(), zwracającej obiekt typu Image, pobieramy rysunek, wywołując ją dla wcześniej utworzonego obiektu typu ImageIcon.

Image rysunek = obraz.getImage();

Kolejny etap to zmniejszenie i umieszczenie obrazka na pasku tytułu okna za pomocą metody setIconImage(), wywołanej z parametrem typu Image. Obrazek źródłowy o wielkości 100x100 punktów zostanie zmniejszony do rozmiaru odpowiadającego ikonie.

setIconImage(obraz);

Okno z ikoną i nazwą na pasku tytułu.

Okno z ikoną i nazwą na pasku tytułu.

Podobnie jak w poprzednich aplikacjach, obiekt typu Okno zostaje utworzony w głównej klasie programu, która znajduje się w bieżącym katalogu. Po utworzeniu okna wywołujemy znane już metody setDefaultCloseOperation i setVisible oraz nową metodę setLocationRelativeTo.

public class Grafika {

public static void main(String[] args) {

Okno ok = new Okno();

ok.setDefaultCloseOperation(3);

ok.setLocationRelativeTo(null);

ok.setVisible(true);

}

}

Metoda setLocationRelativeTo() pochodzi z klasy Window, z której pośrednio dziedziczy klasa JFrame. Gdy przekażemy jej wartość null, okno zostanie umieszczone na środku ekranu.

Dodajemy menu

Pasek menu dodany do panelu.

Pasek menu dodany do panelu.

Po utworzeniu okna możemy przystąpić do umieszczania w nim komponentów. Jednym z nich będzie pasek menu, który dodamy jednak bezpośrednio do powierzchni zawartości okna, a nie do panelu, jak pozostałe komponenty. Ten zabieg jest konieczny, aby pasek menu został zintegrowany z oknem, bo w przeciwnym razie wyglądałby jak zwykły panel.

Pasek menu dodany bezpośrednio do powierzchni zawartości okna.

Pasek menu dodany bezpośrednio do powierzchni zawartości okna.

Funkcje paska menu realizuje klasa JMenuBar, jego menu rozwijanego - klasa JMenu, a elementów menu rozwijanego - klasa JMenuItem. Wszystkie te klasy są zawarte w pakiecie javax.swing. Zwykłe utworzenie obiektów tych klas wygeneruje pasek menu podobny do zaprezentowanego na rysunkach 3 i 4. My nie chcemy jednak standardowego szarego paska z czarnymi napisami. Co więcej, chcemy określać jego wielkość.

W związku z tym pozostało nam utworzenie własnych klas rozszerzających poszczególne klasy API Javy. Nasze własne klasy (Pasek, MenuRoz, MenuElem), związane z paskiem menu, ulokowaliśmy w katalogu paski. Klasa Pasek dziedziczy z klasy JMenuBar.

public class Pasek extends JMenuBar {

public Pasek() {

Dimension rozmiar = new Dimension(490,27);

setPreferredSize(rozmiar);

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

setBackground(tlo);

Border krawedz =

BorderFactory.createEtchedBorder();

setBorder(krawedz);

}

}

W powyższym listingu w konstruktorze naszej klasy wywołaliśmy metodę setPreferredSize() pobierającą obiekt typu Dimension (pakiet java.awt). Metoda ta jest zaimplementowana w klasie JComponent, z której pochodzi klasa JMenuBar, i dlatego także nasza klasa Pasek. Przekazując metodzie setPreferredSize() utworzony wiersz wcześniej obiekt rozmiar typu Dimension, ustawiliśmy szerokość paska na 490 (szerokość okna), a wysokość na 27 pikseli.


Zobacz również