Wykorzystanie obiektów JToolbar i JMenu przy implementacji aplikacji Java są świetnie opisane na następujących stronach:
http://zetcode.com/tutorials/javaswingtutorial/menusandtoolbars/
http://docs.oracle.com/javase/tutorial/uiswing/components/toolbar.html
http://www.java2s.com/Code/Java/Swing-JFC/SwingToolBarDemo.htm
http://www.java-tips.org/java-se-tips/javax.swing/how-to-create-menu-bar.html
Kontynuujemy przygodę z przeglądarką grafiki z poprzedniego laboratorium. Okno główne aplikacji należy wzbogacić o następujące funkcjonalności (sposób obsługi aplikacji przedstawia screencast):
1. po otwarciu aplikacji pojawia się wyłącznie okno główne, w którym mamy do dyspozycji dwa przyciski: Otwórz i Nowy
2. kliknięcie przycisku Nowy tworzy puste okno obrazu bez wyświetlonej żadnej grafiki
3. kliknięcie przycisku Otwórz powoduje:
a) jeżeli żadne okno obrazu nie jest otwarte: stworzenie nowego okna obrazu, otwarcie okna dialogowego wyboru obrazu i wyświetlenie wybranego obrazu w oknie obrazu
b) jeżeli liczba otwartych okien obrazu jest większa lub równa 1: otwarcie okna dialogowego wyboru obrazu i wyświetlenie wybranego obrazu w ostatnio aktywnym oknie obrazu (t.j. takie okno obrazu na którym najpóźniej kliknięto)
Obsługa aplikacji - prezentacja video
W celu wykonania zadania należy klasę okna głównego wzbogacić o dodatkowe pola przechowujące liczbę otwartych okien i referencję do ostatnio aktywnego okna obrazu.
Klasę okna obrazu należy zmodyfikować tak, aby konstruktor otrzymywał referencję do okna głównego. Po takiej modyfikacji zdarzenia związane z aktywacją bądź zamknięciem okna obrazu będą mogły być odnotowane przez główne okno aplikacji.
Zdarzenia związane z obsługą okien (zamknięcie, aktywacja) należy obsłużyć dodając do klasy okna obrazu odpowiedni adapter, rozszerzający klasę WindowAdapter (Listing 1).
Listing 1 Adapter zdarzeń okienkowych
private class myWindowAdapter extends WindowAdapter
{
public void windowClosing( WindowEvent e )
{
System.out.println("I'll be closed");
dispose();
}
public void windowActivated( WindowEvent e )
{
System.out.println("I am active");
}
}
Ponieważ przy implementacji klas korzystać się będzie z klas zagnieżdżonych, warto pamiętać, że referencję do instancji klasy opakowującej z klasy zagnieżdżonej można uzyskać korzystając ze słowa kluczowego this w sposób przedstawiony na Listingu 2.
Listing 2 Przykład referencji do klasy opakowującej
public class Outer
{
String myField;
class Inner
{
String myField;
public void innerClassMethod()
{
(Outer.this).myField+=" + inner writes here";
System.out.println("Hello inner");
}
}
public static void main(String args[])
{
Outer o=new Outer();
o.myField="Outer here";
Outer.Inner in=o.new Inner();
System.out.println(o.myField);
in.innerClassMethod();
System.out.println(o.myField);
}
}
Proszę zmodyfikować okno aplikacji z poprzedniego zadania: dodać pasek menu z menu File zawierającym polecenia Nowy, Otwórz i Zamknij (oddzielone separatorem od pozostałych). Proszę dodać do głównego okna aplikacji pasek narzędzi z ikonami poleceń Nowy i Otwórz.