3 Häufig gepostete Fragen

3.1 [LANG] Die Sprache Java

3.2 [STRING] Strings

3.3 [IO] Eingabe/Ausgabe, Streams, etc.

3.4 [NET] Netzwerk

3.5 [AWT] Abstract Window Toolkit

3.6 [SWING] Swing, das bevorzugte GUI

3.7 [APPLET] Java-Applets und ihre Zusammenarbeit mit Browsern

3.8 [SERVER] Servlets und andere Server-Implementierungen in Java

3.9 [NONCORE] Klassen/Packages, die über den Kern der Sprache hinausgehen, also Java3D etc.

3.10 [OOP] OOP-Konzepte und Patterns in Java

3.11 [JDK] Virtuelle Maschinen, alles über JDKs und deren Installation und Verwendung

3.12 [TOOLS] Java-Zusatz-Tool, zum Beispiel IDEs, Build-Tools, Profiler, etc.

3.13 [MISC] Alles, was nicht in eine der anderen Rubriken paßt

3.14 [ERROR] Fehlermeldungen


3.5 [AWT] Abstract Window Toolkit

Zurück zu "3 Häufig gepostete Fragen"

3.5.1 Wenn ich einen Listener bei mehreren Buttons anmelde, wie kann ich dann unterscheiden, welcher gedrückt wurde?

Wenn Du so vorgehst wird, egal welcher Button geclickt wird, die Methode actionPerformed(ActionEvent ev) des Listeners aufgerufen.

Mit ev.getSource() bekommst Du nun eine Referenz auf die Ereignisquelle (als Object). Dann kannst Du schauen, welcher Button geclickt wurde, z.B. indem Du diese Ereignisquelle mit den vorhandenen Buttons vergleichst oder indem Du auf Button castest und ihre Beschriftung ausliest.

Beispiel:
Angenommen, Du hast einen ActionListener bei jedem Button eines Arrays von 4 Buttons registriert. Dann könnte die Methode actionPerformed im Listener wie folgt aussehen:

public void actionPerformed(ActionEvent ev) {
    int pressed = -1;
    for (int i=0; i<myButtons.length; i++) {
        if (myButtons[i] == ev.getSource()) {
            pressed = i;
            break;
        }
    }

    // hier abhängig von pressed verschiedene Aktionen
    // ausführen
}

oder so:

public void actionPerformed(ActionEvent ev) {
    Button pressed = (Button) ev.getSource();
    System.out.println("Pressed: " + pressed.getLabel());
}

Autor: Michael Paap, Christian Kaufhold

Zurück zu "3.5 [AWT] Abstract Window Toolkit"

3.5.2 Kann ich ein Fenster (Frame/JFrame) maximieren?

Antwort: Jein.

Bis zum J2SDK 1.3 (einschließlich) gibt es keine Möglichkeit, ein Fenster zu maximieren. Es gibt nur verschiedene Workarounds, um ein Fenster möglichst flächendeckend auf dem Desktop darzustellen (s.u.)

Ab dem J2SDK1.4 gibt es die Methode setExtendedState(int state) aus der Klasse java.awt.Frame, mit der das Fenster *vielleicht* maximiert wird. Ob das möglich ist, kann mittels isFrameStateSupported(int state) aus dem Toolkit ermittelt werden, denn nicht jede Plattform unterstützt solche maximierten Fenster.

Für Anwendungen, die mittels einer J2SDK-Version bis 1.3 erstellt werden sollen, gibt es nur Workarounds, da es eine "Maximieren"-Funktion nicht gibt. Für den Windows-Benutzer mag das merkwürdig sein, für den Unix-Benutzer ist der Gedanke merkwürdig, dass die tatsächliche Bildschirmgrösse etwas mit der Desktopgröße zu tun haben sollte.

Lange Rede, kurzer Code:
um ein Fenster möglichst groß zu machen, nehme man

  setSize(getToolkit().getScreenSize());

Hierdurch wird das darzustellende Fenster vielleicht auf die Größe der aktuellen Bildschirmauflösung gesetzt. Ohne Berücksichtigung evtl. darzustellender Menü- und/oder Taskleisten.

Falls auf der Laufzeitplattform ein öffnendes Programmfenster von einem Fenstermanager platziert wird, hat die setSize(Dimension)-Methode möglicherweise keine Auswirkung auf das Fenster. Der Programmierer sollte sich also nicht darauf verlassen, dass sein Fenster so dargestellt wird, wie er es programmiert hat!

Eine weitere Möglichkeit, ein Fenster evtl. zu maximieren besteht darin, die Klasse java.awt.Robot (seit J2SDK 1.3) zu benutzen, um die Maximieren-Schaltfläche programmgesteuert anklicken zu lassen. Hinweise zur Benutzung dieser Klasse finden sich im JDC Tech Tip vom 11. Juli 2000

Wegen dieser ganzen Unwägbarkeiten ist es oft eine Alternative, statt das Fenster zu maximieren, es einfach Wiederherzustellen und die Größe und Position des Fensters von einem vorherigen Programmlauf zu benutzen. Hierbei sollte jedoch darauf geachtet werden, dass die Geometrie eines maximierten Fensters *nicht* durch ein normales Fenster nachgebildet wird, weil der Anwender sonst dadurch verwirrt wird, dass das Fenster maximiert aussieht, es aber in Wirklichkeit nicht ist!

Autor: Karsten Schulz

Zurück zu "3.5 [AWT] Abstract Window Toolkit"

3.5.3 Wie tausche ich die Kaffeetasse im blauen Balken aus?

Das geht mit java.awt.Frame#setIconImage(java.awt.Image).

Beispiel:

    ImageIcon icon = new ImageIcon("meinBildchen.gif");
    setIconImage(icon.getImage());

Autor: Karsten Schulz, Roger Schuster, Christian Wederhake

Zurück zu "3.5 [AWT] Abstract Window Toolkit"
Hosted by www.Geocities.ws

1