Advanced
Java
Services
|
JInternalFrame und JDesktopPane |
Grundlegende Eigenschaften
JInternalFrames sind eine Möglichkeit, in Java das MDI (multiple document interfaces) zu realisieren
(eine ander Möglichkeit bietet ein JTabbedPane). Ein InternalFrame verhält sich ähnlich wie ein
TopLevelFrame, man kann es maximieren, minimieren, verschieben, vergrößern, verkleinern und natürlich
auch schließen. JInternalFrame ist einer der fünf RootPaneContainer von Swing und daher werden Komponenten
in das sog. ContentPane aufgenommen.
Aufnehmen von Komponenten in ein JInternalFrame
Natürlich kann man auch in 1.5 noch so codieren wie in 1.4 .
Das Schließen eines JInternalFrames kann man wie bei JFrame über die Methode setDefaultCloseOperation(int operation)
steuern oder auch über einen Listener. Was für ein TopLevelFenster der WindowListener und der WindowEvent,
das ist für ein JInternalFrame der InternalFrameListener und der InternalFrameEvent.
Der Container für JInternalFrames: JDesktopPane
JDesktopPane ist ein Container, der eigens dafür geschaffen wurde, JInternalFrames aufzunehmen.
JDesktopPane hat kein voreingestelltes Layout, sodaß man aufgenommene JInternalFrames selbst
positionieren muß. Der nachfolgende Codeausschnitt zeigt das Vorgehen.
JDesktopPane desktop = new JDesktopPane();
JInternalFrame inFrame = new JInternalFrame
( "i'm an internal frame",
true, //resizable
true, //closable
true, //maximizable
true //iconifiable
);
desktop.add(inFrame);
inFrame.setDefaultCloseOperation(inFrame.DO_NOTHING_ON_CLOSE);
inFrame.addInternalFrameListener( new InternalFrameCloseHandler() );
inFrame.getContentPane().add(childComponent);
inFrame.setSize(400,300);
inFrame.setLocation(20,20);
inFrame.setVisible(true);
Es folgen Ausschnite aus der Dokumentation von JInternalFrame und JDesktopPane.
JInternalFrame
Konstruktoren | |
JInternalFrame() |
Creates a non-resizable, non-closable, non-maximizable, non-iconifiable JInternalFrame with no title. |
JInternalFrame(String title) |
Creates a non-resizable, non-closable, non-maximizable, non-iconifiable JInternalFrame with the specified title. |
JInternalFrame(String title, boolean resizable) |
Creates a non-closable, non-maximizable, non-iconifiable JInternalFrame with the specified title and resizability. |
JInternalFrame(String title, boolean resizable, boolean closable) |
Creates a non-maximizable, non-iconifiable JInternalFrame with the specified title, resizability, and closability. |
JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable) | Creates a non-iconifiable JInternalFrame with the specified title, resizability, closability, and maximizability. |
JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable) | Creates a JInternalFrame with the specified title, resizability, closability, maximizability, and iconifiability. |
Einige Methoden | |
Returntyp | Name der Methode |
void | addInternalFrameListener(InternalFrameListener l) Adds the specified listener to receive internal frame events from this internal frame. |
void | removeInternalFrameListener(InternalFrameListener l) Removes the specified internal frame listener so that it no longer receives internal frame events from this internal frame. |
void | dispose() Makes this internal frame invisible, unselected, and closed. |
void | doDefaultCloseAction() Fires an INTERNAL_FRAME_CLOSING event and then performs the action specified by the internal frame's default close operation. |
int | getDefaultCloseOperation() Returns the default operation that occurs when the user initiates a "close" on this internal frame. |
void | setDefaultCloseOperation(int operation) Sets the operation that will happen by default when the user initiates a "close" on this internal frame. |
JDesktopPane | getDesktopPane() Convenience method that searches the ancestor hierarchy for a JDesktop instance. |
Component | getFocusOwner() If this JInternalFrame is active, returns the child that has focus. |
void | hide() Hides this internal frame. |
void | toBack() Sends this internal frame to the back. |
void | toFront() Brings this internal frame to the front. |
JDesktopPane
Konstruktoren | |
JDesktopPane() | Creates a new JDesktopPane. |
Einige Methoden | |
Returntyp | Name der Methode |
JInternalFrame[] | getAllFrames() Returns all JInternalFrames currently displayed in the desktop. |
JInternalFrame | getSelectedFrame() Returns the currently active JInternalFrame in this JDesktopPane, or null if no JInternalFrame is currently active. |
void | setSelectedFrame(JInternalFrame f) Sets the currently active JInternalFrame in this JDesktopPane. |
int | getDragMode() Gets the current "dragging style" used by the desktop pane. |
void | setDragMode(int dragMode) Sets the "dragging style" used by the desktop pane. This is JDesktopPane.LIVE_DRAG_MODE or JDesktopPane.OUTLINE_DRAG_MODE |
Canaletto in Internal Frames
Im folgenden Applet kann man über das Datei-Menu ein Dialogfenster öffnen. Hier werden einem
nach dem Laden 15 Bilder des italienischen Malers Canaletto angeboten, die man über das Menu
Datei in Internal Frames öffnen kann. Damit man nicht warten muß, bis alle Bilder geladen sind,
werden die Bilder in einem eigenen Thread im Hintergund geladen. Mit einem Doppelclick in das Innere
des Frames "verläßt" der InternalFrame das JDesktoppane des Applets
und wird als externer Frame angezeigt und man kann das Bild ohne Scrollbalken sehen. Ein Doppelclick
auf das externe Fenster läßt dieses wieder zurückwandern auf den Desktop des Applets. Natürlich
können InternalFrmes nicht ihr JDesktopPane verlassen. Es sieht nur so aus. Auf den Mausdoppelclick
wird das Scrollpane aus dem InternalFrame genommen, das InternalFrame geschlossen und eine neues JFrame
angelegt und mit dem ScrollPane gefüllt und sichtbar gemacht. Schließt man das JFrame (auch mit
Doppelclick) so wird der ganze Prozess umgekehrt.
Das externe Fenster ist tatsächlich ein JFrameObjekt, obwohl es so aussieht wie ein InternalFrame.
Seit der Version 1.4 gibt es in Frame die Methode setUndecorated() und in JRootPane die Methode
setWindowDecorationStyle(). Mit der ersten Methode kann man den betriebssystemabhängigen Fensterrahmen
ausblenden, mit der zweiten Methode kann man einen anderen Fensterrahmen anwählen.
JFrame frame = new JFrame(title);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
Der sich öffnende Dialog ist eine eigene Unterklasse von JDialog, der ein JListobjekt enthält,
das mit Hilfe eines eigenen Renderers sowohl eine Bildvorschau als auch Text darstellen kann.
Wie das bewerkstelligt wird, findet man im Kapitel über JList.
Über Canaletto 1
Giovanni Antonio Canal (7.Oktober 1697 Venedig - 19. April 1768 Venedig), genannt Canaletto, war ein
italienischer Landschaftsmaler. Canaletto lernte die Malerei in der Werkstatt seines Vaters, der
Bühnenbilder für Theateraufführungen herstellte. Berühmt wurde er durch die Bilder seiner Heimatstadt
Venedig. Sie bestechen durch ungewöhnlich genauen und detailreichen Realismus sowie eine warme Atmosphäre.
Dabei benutzte er eine Camera obscura, wobei ihn sein Neffe Bernardo Bellotto unterstützte. Die Bilder
sind so genau, dass sie heute benutzt werden, um das Versinken der Stadt über einen längeren Zeitraum zu
bestimmen.
Canaletto hatte seine Bilder vor allem als Souvenirs für englische Touristen gemalt. Nach dem Ausbruch
des Österreichischen Erbfolgekrieges sank die Zahl seiner Aufträge. Er ging für 10 Jahre nach England,
nachdem er von Jacopo Amigoni (1675-1752), der als Künstler dort mehrere Jahre verbracht hatte, von
den dortigen Lebensumständen erfahren hatte. Seine dort entstandenen Bilder wirken leichter und lebhafter.
Sie zählen zu den besten Darstellungen Londons im 18. Jahrhundert. Die letzten zehn Jahre seines Lebens
kehrte er nach Venedig zurück. Seine Bilder wurden dunkler, aber immer noch voller Überraschungen.
(aus Wikipedia, der freien Enzyklopädie
über Canaletto)
Über Canaletto 2
Canaletto (Giovanni Antonio Canal) (1697-1768). Venetian painter, the most famous view-painter
of the 18th century. He began work painting theatrical scenery (his father's profession), but
he turned to topography during a visit to Rome in 1719-20, when he was influenced by the work
of Giovanni Paolo Panini. By 1723 he was painting dramatic and picturesque views of Venice,
marked by strong contrasts of light and shade and free handling, this phase of his work
culminating in the splendid Stone Mason's Yard (National Gallery, London, c. 1730). Meanwhile,
partly under the influence of Luca Carlevaris, and largely in rivalry with him, Canaletto
began to turn out views which were more topographically accurate, set in a higher key, and
with smoother, more precise handling -- characteristics that mark most of his later work. At
the same time he began painting the ceremonial and festival subjects which ultimately formed
an important part of his work.
His patrons were chiefly English collectors, for whom he sometimes produced series of views
in uniform size. Conspicuous among them was Joseph Smith, a merchant, appointed British Consul
in Venice in 1744. It was perhaps at his instance that Canaletto enlarged his repertory in the
1740s to include subjects from the Venetian mainland and from Rome (probably based on drawings
made during his visit as a young man), and by producing numerous capricci. He also gave increased
attention to the graphic arts, making a remarkable series of etchings, and many drawings in pen,
and pen and wash, as independent works of art and not as preparation for paintings. This led to
changes in his style of painting, increasing an already well-established tendency to become stylized
and mechanical in handling. He often used the camera obscura as an aid to composition.
In 1746 he went to England, apparently at the suggestion of Jacopo Amigoni (the War of the Austrian
Succession drastically curtailed foreign travel, and Canaletto's tourist trade in Venice had dried up).
For a time he was very successful, painting views of London and of various country houses. Subsequently,
his work became increasingly lifeless and mannered, so much so that rumors were put about, probably by
rivals, that he was not in fact the famous Canaletto but an impostor.
In 1755 he returned to Venice and continued active for the remainder of his life. Legends of his having
amassed a fortune in Venice are disproved by the official inventory of his estate on his death. Before
this, Joseph Smith had sold the major part of his paintings to George III, thus bringing into the royal
collection an unrivalled group of Canaletto's paintings and drawings.
Canaletto was highly influential in Italy and elsewhere. His nephew Bernardo Bellotto took his style to
Central Europe and his followers in England included William Marlow and Samuel Scott.
(taken from the Canaletto site of
the famous webmuseum)
|