Programmieren in Java: Aufbau
Dieses Buch ist unter einer Creative Commons-Lizenz lizensiert.
Der Zugriff auf das Computer-System ist für Applet-Programmierer nur sehr eingeschränkt möglich. Sun hat Java so konzipiert, dass Java-Applets in einer Sandbox laufen, die mehr oder weniger hermetisch vom physikalischen Computer-System abgeschirmt ist. Das Java-Applet kennt nur die Sandbox - Zugriffe auf das System sind grundsätzlich verboten. Das heißt, dass Sie als Applet-Programmierer beispielsweise grundsätzlich keinen Zugriff auf das Dateisystem oder auf andere Anwendungen haben.
Der Grund für diesen restriktiven Zugriff ist klar: Wer möchte schon ein Java-Applet aus dem Internet ausführen, wenn dieses Zugriff auf sämtliche Teile des Computers hätte? Durch die hohen Zugriffsbeschränkungen erfüllt Sun lediglich die Anforderungen der Anwender, die ohne Vertrauen in Java-Applets diese kaum ausführen würden und somit auch kaum zum Erfolg von Java beigetragen hätten.
Dennoch: Die Sandbox bietet Schnittstellen zum Computer-System an. Sie greifen hierbei nicht direkt auf den Computer zu, sondern Java bietet Ihnen innerhalb der Sandbox einen kontrollierten Zugriff an. Sicherheit wird groß geschrieben.
Auf was Sie genau von einem Java-Applet aus auf Informationen im Computer-System zugreifen können, erfahren Sie in diesem Kapitel. Selbstverständlich stehen die in diesem Kapitel vorgestellten Möglichkeiten auch für Programmierer von Java-Applications zur Verfügung. Dort gibt es jedoch viel umfassendere Möglichkeiten für einen Systemzugriff, da Applications nicht den rigorosen Sicherheitsbestimmungen von Applets unterworfen sind.
Wenn Sie in Java mit Hilfe der AWT-Klassen grafische Benutzerschnittstellen entwickeln, passt Java die Anzeige der Schaltflächen an die Betriebssystemumgebung an. Das heißt, eine Java-Eingabeschaltfläche sieht, wenn das Applet unter Microsoft Windows läuft, genauso aus wie jede andere Eingabeschaltfläche unter diesem Betriebssystem auch. Läuft das gleiche Java-Applet jedoch auf einem Apple Macintosh, so sieht die Eingabeschaltfläche eben typisch Mac aus.
Moderne Betriebssysteme ermöglichen eine benutzerdefinierte Farbgestaltung von Fenstern, Menüs, Hintergründen und so weiter. Jeder Anwender kann sich so seinen persönlichen Desktop zusammenstellen in den Farben, die ihm am besten gefallen. Wäre es nicht schön, wenn sich das Java-Applet in seiner farblichen Gestaltung an die Einstellungen im Betriebssystem anpassen würde? Während Java die formale Gestaltung von Schaltflächen an das Betriebssystem anpasst, geschieht dies nicht automatisch bei den Farben.
Die Klasse java.awt.SystemColor
ist der Schlüssel. Die Anwendung der Klasse ist extrem einfach: java.awt.SystemColor
besteht fast ausschließlich aus öffentlichen statischen Eigenschaften. Das heißt, Sie müssen kein Objekt von dieser Klasse erstellen, und Sie müssen keine Methoden-Schnittstellen erlernen. Sie brauchen lediglich einen Überblick über die Eigenschaften von java.awt.SystemColor
, den Sie im Folgenden bekommen.
java.awt.SystemColor.desktop
enthält die Hintergrundfarbe des Desktops.
java.awt.SystemColor.activeCaption
speichert die Hintergrundfarbe der Titelleiste selektierter Fenster.
java.awt.SystemColor.activeCaptionText
ermöglicht den Zugriff auf die Schriftfarbe für die Titelleiste selektierter Fenster.
java.awt.SystemColor.activeCaptionBorder
bietet die Rahmenfarbe der Titelleiste selektierter Fenster an.
java.awt.SystemColor.inactiveCaption
gibt die Hintergrundfarbe der Titelleiste nicht-selektierter Fenster an.
java.awt.SystemColor.inactiveCaptionText
bietet Zugriff auf die Schriftfarbe der Titelleiste nicht-selektierter Fenster.
java.awt.SystemColor.inactiveCaptionBorder
enthält die Rahmenfarbe der Titelleiste nicht-selektierter Fenster.
java.awt.SystemColor.window
speichert die Hintergrundfarbe von Fenstern.
java.awt.SystemColor.windowBorder
gibt die Farbe für Fensterrahmen an.
java.awt.SystemColor.windowText
enthält die Textfarbe im Fenster.
java.awt.SystemColor.menu
bietet Zugriff auf die Hintergrundfarbe von Menüs.
java.awt.SystemColor.menuText
gibt die Textfarbe in Menüs an.
java.awt.SystemColor.text
speichert die Hintergrundfarbe für Textfelder.
java.awt.SystemColor.textText
enthält die Textfarbe für Textfelder.
java.awt.SystemColor.textHighlight
bietet die Hintergrundfarbe für hervorgehobenen Text an.
java.awt.SystemColor.textHighlightText
gibt die Textfarbe für hervorgehobenen Text an.
java.awt.SystemColor.textInactiveText
speichert die Textfarbe für inaktiven Text.
java.awt.SystemColor.control
enthält die Hintergrundfarbe für Dialogelemente.
java.awt.SystemColor.controlText
speichert die Textfarbe für Dialogelemente.
java.awt.SystemColor.controlHighlight
gibt die Farbe für hervorgehobene Dialogelemente an.
java.awt.SystemColor.controlLtHighlight
enthält die helle Farbe für hervorgehobene Dialogelemente.
java.awt.SystemColor.controlShadow
speichert die Farbe für den Schatten von Dialogelementen.
java.awt.SystemColor.controlDkShadow
enthält die dunklere Farbe für den Schatten von Dialogelementen.
java.awt.SystemColor.scrollbar
gibt die Hintergrundfarbe für Schieberegler an.
java.awt.SystemColor.info
speichert die Hintergrundfarbe für Hilfetext.
java.awt.SystemColor.infoText
enthält die Textfarbe für Hilfetext.
In den oben genannten statischen Eigenschaften befinden sich jeweils die Farbwerte, die momentan im Betriebssystem eingestellt sind. Sie nutzen diese Werte, indem Sie sie als Parameter an Methoden wie setBackground()
, setForeground()
oder setColor()
übergeben. Die Klasse java.awt.SystemColor
ist von java.awt.Color
abgeleitet, so dass Sie sie auch überall dort einsetzen können, wo als Parameter java.awt.Color
erwartet wird.
Im folgenden kleinen Beispiel wird im Java-Applet ein neues Fenster mit einem eigenen Menü geöffnet, dessen Farben sich teilweise an den aktuellen Einstellungen im Betriebssystem orientieren.
import java.applet.*; import java.awt.*; import java.awt.event.*; public class MyApplet extends Applet implements ActionListener, WindowListener { Frame Window; public void init() { Window = new Frame(); Window.setLayout(new FlowLayout()); Window.setBackground(SystemColor.desktop); MenuItem ItemExit = new MenuItem("Beenden"); ItemExit.addActionListener(this); Menu MenuApplet = new Menu("Applet"); MenuApplet.add(ItemExit); MenuBar Bar = new MenuBar(); Bar.add(MenuApplet); Window.setMenuBar(Bar); Button ButtonExit = new Button("Beenden"); ButtonExit.addActionListener(this); ButtonExit.setForeground(SystemColor.controlText); ButtonExit.setBackground(SystemColor.control); Window.add(ButtonExit); Window.addWindowListener(this); Window.setSize(400, 300); Window.setVisible(true); } public void actionPerformed(ActionEvent ev) { Window.setVisible(false); Window.dispose(); } public void windowClosing(WindowEvent ev) { Window.setVisible(false); Window.dispose(); } public void windowActivated(WindowEvent ev) { } public void windowClosed(WindowEvent ev) { } public void windowDeactivated(WindowEvent ev) { } public void windowDeiconified(WindowEvent ev) { } public void windowIconified(WindowEvent ev) { } public void windowOpened(WindowEvent ev) { } }
Das Beispiel-Applet öffnet ein neues Java-Fenster und fügt diesem eine Menü-Leiste hinzu sowie eine anklickbare Schaltfläche, über die man beide das Java-Fenster jederzeit schließen kann. Die Klasse java.awt.SystemColor
wird dreimal im Code verwendet: Die Hintergrundfarbe des Java-Fensters wird auf die aktuelle Hintergrundfarbe des Desktops gesetzt. Außerdem wird die Text- und Hintergrundfarbe für die anklickbare Schaltfläche auf die Farben gesetzt, die momentan im Betriebssystem eingestellt sind. Über weitere Aufrufe von Methoden, um Farben zu setzen, ließe sich ein Applet sehr gut in die aktuellen Farbeinstellungen eines Systems einbetten.
Das Toolkit ist die Verbindung zwischen dem Java-System und dem Betriebssystem. Das Toolkit wird hauptsächlich vom Java-System selber benötigt, um Aufgaben mit Hilfe von Betriebssystemfunktionen ausführen zu können. Dennoch steht das Toolkit als eine eigene Klasse auch dem Java-Applet-Programmierer zur Verfügung. Die Klasse java.awt.Toolkit
bietet Methoden an, die oft direkt auf Betriebssystemfunktionen zugreifen und somit Möglichkeiten eröffnen, für die das Java-System selber zu beschränkt ist.
Sie erstellen niemals selber ein Objekt der Klasse java.awt.Toolkit
, sondern lassen sich stattdessen über den Aufruf der Methode getToolkit()
, die in der Klasse java.applet.Applet
definiert ist, das aktuelle Toolkit zurückgeben. Über dieses können Sie dann mehr oder weniger direkt auf Funktionen des Betriebssystems zugreifen. Die Klasse java.awt.Toolkit
ist abstrakt, so dass Sie sowieso keine eigenen Objekte dieses Typs erstellen können.
Im Folgenden sehen Sie eine Reihe interessanter Methoden, die von der Klasse java.awt.Toolkit
angeboten werden.
beep()
löst einen kurzen Ton aus.
getFontList()
gibt die vom Java-System unterstützten Schriftarten zurück.
getFontMetrics()
gibt genaue Informationen zu Größenangaben einer Schriftart zurück.
getScreenResolution()
gibt die Bildschirmauflösung in der Einheit Pixel pro Zoll zurück.
getScreenSize()
gibt die Bildschirmgröße in Pixel zurück.
Das folgende Beispiel-Programm läßt bei einem Mausklick auf eine Schaltfläche einen kurzen Piepser aus dem Lautsprecher ertönen.
import java.applet.*; import java.awt.*; import java.awt.event.*; public class MyApplet extends Applet implements ActionListener { public void init() { Button Beep = new Button("Beep"); Beep.addActionListener(this); add(Beep); } public void actionPerformed(ActionEvent ev) { Toolkit Tk = getToolkit(); Tk.beep(); } }
Sie sehen, dass Sie die Methode getToolkit()
direkt innerhalb des Java-Applets aufrufen können, weil diese Methode durch Vererbung aus der Klasse java.applet.Applet
zur Verfügung steht. Über die Referenzvariable vom Typ java.awt.Toolkit
können Sie dann genauso einfach wie beep()
auch die anderen oben vorgestellten Methoden aufrufen.
Die Klasse java.lang.System
macht es möglich, sogenannte Umgebungsvariablen eines Java-Programms abzufragen. Umgebungsvariablen sind Variablen, die Informationen zum umgebenden Computer-System enthalten. So können Sie beispielsweise überprüfen, unter welchem Betriebssystem das Java-Applet gerade ausgeführt wird oder welche Java-Version die momentan ausführende Java-VM unterstützt.
Sie erstellen niemals ein Objekt vom Typ java.lang.System
, sondern greifen über eine statische Methode direkt auf die gewünschten Umgebungsvariablen zu. Folgende zwei statische Methoden sind am interessantesten.
getProperty()
übergeben Sie genau einen Parameter vom Typ java.lang.String
. Dieser Parameter gibt die Umgebungsvariable an, deren Wert Sie abfragen möchten. Die Methode gibt den Wert der Umgebungsvariable als java.lang.String
zurück. Wird die angegebene Umgebungsvariable nicht gefunden, wird null
zurückgegeben.
getProperty()
ist überladen. Sie können dieser Methode auch zwei Parameter vom Typ java.lang.String
übergeben. Der erste Parameter gibt die Umgebungsvariable an, deren Wert Sie abfragen möchten. Der zweite Parameter ist der Rückgabewert dieser Methode, wenn die angegebene Umgebungsvariable nicht gefunden wird.
Um Umgebungsvariablen abzufragen, rufen Sie eine der zwei Versionen von getProperty()
auf. Mögliche Umgebungsvariablen, die Sie abfragen können, finden Sie in folgender Auflistung.
java.version
gibt die Java-Versionsnummer zurück.
java.vendor
gibt eine herstellerspezifische Zeichenkette zurück.
java.vendor.url
gibt eine WWW-Adresse zum Hersteller der Java-VM zurück.
java.home
gibt das Intallationsverzeichnis zurück.
java.class.version
gibt die Versionsnummer der Java-Klassenbibliothek zurück.
java.class.path
gibt den Klassenpfad zurück.
os.name
gibt den Namen des Betriebssystems zurück.
os.arch
gibt die Betriebssystem-Architektur zurück.
os.version
gibt die Versionsnummer des Betriebssystems zurück.
file.separator
gibt das Trennzeichen für Pfadangaben zurück.
path.separator
gibt das Trennzeichen für die Laufwerksangabe eines Pfadnamens zurück.
line.separator
gibt die Zeichenkette für einen Zeilenvorsprung zurück.
user.name
gibt den Namen des angemeldeten Anwenders zurück.
user.home
gibt das Home-Verzeichnis zurück.
user.dir
gibt das aktuelle Arbeitsverzeichnis zurück.
Es ist vom Java-System abhängig, ob eine Umgebungsvariable zur Verfügung steht oder nicht. Sie müssen immer davon ausgehen, dass eine Umgebungsvariable eventuell nicht existiert. Genausogut kann es auch sein, dass zusätzliche Umgebungsvariablen existieren, die Ihnen Zugriff auf weitere Systemeigenschaften bieten.
Im Folgenden sehen Sie eine kleine Beispiel-Anwendung, die Betriebssystemnamen und -version inklusive Rechnerarchitektur ausgibt.
import java.applet.*; import java.awt.*; public class MyApplet extends Applet { public void paint(Graphics g) { g.drawString("Betriebssystem: " + System.getProperty("os.name", "unbekannt"), 5, 15); g.drawString("Architektur: " + System.getProperty("os.arch", "unbekannt"), 5, 25); g.drawString("Betriebssystemversion: " + System.getProperty("os.version", "unbekannt"), 5, 35); } }
Sie sehen, dass sich der Zugriff auf Umgebungsvariablen sehr einfach gestaltet.
Copyright © 2001-2010 Boris Schäling