Advanced   Java   Services
JInternalFrame und JDesktopPane
Back Next Up Home

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
ReturntypName 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
ReturntypName 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)

Copyright Dipl.Math. H.M.Straub
top Back Next Up Home