129
Synopsis: [de.wikipedia.org/wiki/Swing] [JFC/Swing] [Basic Java Graphics]
Es ist leider nicht ganz einfach, aber Schritt für Schritt wird klar werden wie es funktioniert. Zunächst lade man die Spielwiese: spider-v1.0.2.zip und entpacke sie:
![]() |
Doppelklick auf "SpiderStart.class". Klickt man nun ins Gelbe gibt es einen grünen Fleck: |
![]() |
Unter Windows 2000 scheint das nicht immer so zu funktionieren, daher aus BlueJ heraus starten:
Projekt unter BlueJ öffnenBlueJ starten und damit das spider-v1.0 Projekt öffnen: Hier ist nun das Klassendiagramm mit der Verbindung zwischen SpiderStart und SpiderBox zu erkennen. Die Klasse Spider wird vorerst nicht benutzt! |
![]() |
| Nun mit der rechten Maustaste auf SpiderStart klicken | Und die main-Methode aufrufen | Wenn es so aussieht.. |
|---|---|---|
![]() |
![]() |
![]() |
| OK klicken, wir wollen keine Parameter an main übergeben. | ..sind die Klassen nicht compiliert. Auf Button "Compile" klicken. |
Durch einen Doppelklick auf SpiderStart wird die Klasse im Editor geöffnet:
import java.awt.*;
import java.awt.event.*;
/**
* Title: spider - SpiderStart
... */
public class SpiderStart {
/**Konstruktor fuer die Applikation*/
public SpiderStart() {
SpiderBox sbox = new SpiderBox(); //die SpiderBox wird erzeugt
sbox.setSize(700,700); //die Groesse der Box wird festgelegt
sbox.setTitle("SpiderBox 1.0.2 © MezData '2005");
sbox.setVisible(true);
}
/**Main Methode zum starten der Applikation*/
public static void main(String[] args) {
new SpiderStart();
}
}
|
Es wird offenbar, wozu diese Klasse gut ist: Nur zum Erzeugen der SpiderBox! |
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
/**
* Title: spider - SpiderBox
... */
public class SpiderBox extends JFrame {
private MyPanel mPan = new MyPanel();
public SpiderBox() {
getContentPane().add(mPan);
addWindowListener(new WindowAdapter(){ // Objekt soll beendet werden können
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyPanel extends JPanel {
private JLabel versi = new JLabel("Spider 1.0.2 (c) MezData");
private JButton exit = new JButton("Exit");
private int ortX= 50,ortY=50;
public MyPanel(){
setBackground(Color.yellow);
setLayout(new FlowLayout());
add(versi);
add(exit);
exit.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
});
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
canvas_mousePressed(e);
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillOval(ortX-24, ortY-24, 48, 48);
}
public void canvas_mousePressed(MouseEvent e) {
ortX=e.getX();
ortY=e.getY();
repaint();
}
}
AWT |
Swing |
Objekt ist die Grundklasse, die "Mutter" aller Klassen.
Ein Grafikprogramm besteht aus einer Hierachie ineinander geschachtelter Bausteine, den sogenannten Komponenten, sie können von der Klasse Component abgeleitet werden. Die Klasse Container spielt bei der grafischen Programmierung eine wichtige Rolle, jedes Hauptfenster in Java ist ein Container, der wiederum weitere Komponenten enthalten kann. Die wichtigsten Container sind Frame (für die Fenster eines Programms) und das Panel. In diese Container können Komponenten wie Buttons, Textfelder, Labels usw. aufgenommen werden. Bei AWT ist alles noch ziemlich einfach: Komponenten einfach ins Frame. Bei Swing wird es interessant: In das JFrame wird an einer vorgesehenen Kontaktstelle ein JPanel eingebaut, das dann die Komponenten aufnehmen kann. Dem geneigten Leser sei dieser Link empfohlen: [A JFrame Autopsy] |
|---|
public class SpiderBox extends JFrame die SpiderBox ist eine SubKlasse von JFrame, SubKlassen erweitern die Oberklassen. Wir brauchen unsere eigene SpiderBox-Klasse für unsere SpiderBox-Instanz, dazu erweitern wir ein JFrame.
MyPanel mPan = new MyPanel(); Bei Swing steckt im Frame ein Panel. Was soll das? Frame ist der Rahmen, das Fenster. Darin befindet sich ein Panel auf dem sich weitere Komponenten befinden können.
getContentPane().add(mPan); // nimm den Rahmen und setz das Panel ein!
addWindowListener(new WindowAdapter() Ok, es ist so: Klickt man auf ein Fenster erzeugt man eine Nachricht an dieses Fenster, man kann nun Zuhörer basteln, die auf bestimmte Nachrichten reagieren. Unser Freund reagiert auf Fenster-schliessen-Nachrichten.
class MyPanel extends JPanel { // So sieht unser Panel aus.
JLabel versi = new JLabel("Spider 1.0.1 (c) MezData");

Muss das Klassendiagramm wirklich so genau sein? Nutzt uns das? Was ist wirklich wichtig?

Dies ist erst der Anfang, ich habe an dieser Stelle abgebrochen. Auch hier stellt sich die Frage, worin der Sinn besteht weiter zu machen..
Ok, zum Üben und trainieren wäre es sinnvoll. In der Praxis interessieren eher die wesentlichen Abläufe und Beteiligten:
![]() |
Für die Anwendung interessieren eigentlich nur die SpiderBox und später die Spinnen.
Zwei wesentliche Aktionen passieren:
|

![]() |
Painting in AWT and Swing |
![]() |
To be..
© Oliver Mezger 11.02.2006 MezData.de Den Kontakt herstellen...