myJava.rwp

Handbuch

JAVA Klassen, Methoden und ihre Anwendung

AffineTransform

Antialiasing

BasicStroke

BufferedImage

Font

Graphics2D

JLabel

JFormattedTextFields

JTextArea

Threads

Zufallszahlen

Abkürzungen

API - application program interfaces (in Java bereits integriert)

CDC - Connected Device Configuration

CLDC - Connected Limited Device Configuration

CVM - C Virtuel Machine

GUIgraphical user interface

J2EE - Java2 Enterprise Edition

J2ME - Java2 Micro Edition

J2SE – Java2 Standard Edition

JAR – Java Archive

JDK – Java Development Kit

JFC Java Foundation Classes

JRE – Java Runtime Environment = JVM, Hauptklassen + Java Bibliotheken

JVM – Java Virtuell Machine (Bestandteil JRE)

MIDP - Mobile Information Device Profile

Mobile Java – Umgebung für PDA, Handy etc.

RMI - Remote Method Invocation

 

JLabel

Ein Label erstellen und ausrichten

JLabel label = new JLabel(“Text”, SwingConstants.RIGHT);

oder auch:

JLabel label = new JLabel(“Text”, JLabel.CENTER);

zurück

 

JFormattedTextField

 

Ein Beispiel:

 

double wert = 180.09;

 //Format festlegen

NumberFormat format = NumberFormat.getNumberInstance();

 //Kommastellen festlegen

format.setMinimumFractionDigits(2);

 //neues Feld

JFormattedTextField zahlenFeld = new JFormattedTextField(format);

 //Wert in Zahlenfeld(als Object), daher new Double

zahlenFeld.setValue(new Double(wert));

 //Groesse des Feldes

zahlenFeld.setColumns(10);

 //Listener setzen

zahlenFeld.addPropertyChangeListener(this);

 //Ausrichtung im TextFeld

zahlenFeld.setHorizontalAlignment(JTextField.CENTER);

 

Werte aus FormattedTextFields generieren.

Methode getValue gibt Objecte zurück, die gecastet werden müssen:

 

doubleWert = ((Number)myField.getValue()).doubleValue();

 

intWert = ((Number)myField.getValue()).intValue();

zurück

 

Threads

 

Ein Thread ist ein Teil eines Programms, der eigenständig läuft, während der Rest des Programms etwas anderes tut (Multitasking).

 

Graphische Animationen sollten grundsätzlich als Thread laufen, um einen einwandfreien Ablauf des Programms zu gewährleisten.

 

Um einen Thread zu erzeugen, muss entweder Thread die Superklasse sein oder Runnable muss implementiert werden. Dann wird eine Instanz von Thread erzeugt:

 

Thread myThread = new Thread(this);

 

Der Aufruf der Methode run() erfolgt durch:

 

myThread.start();

 

Die run()-Methode beinhaltet den Programmcode, der das Thread steuert:

 

z.B.:

public void run() {

 setze die Variablen();

 repaint();

 sleep(100);

}

 

Main-Methode als Thread starten

 

Um Probleme beim Lauf von GUI unter Swing zu vermeiden, sollten die entsprechenden Klassen unter der Verwendung der invokeLater Methode aufgerufen werden:

 

class DieseKlasse extends JPanel {

 

 Konstruktor

  JPanel buttonPane = new JPanel();

  JPanel ....

  ....

  add(buttonPane);

  .....

 }

 public static void createAndShowGUI() {

  JFrame frame = new JFrame(“Name”);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  DieseKlasse instanz = new DieseKlasse();

  instanz.setOpaque(true); //content panes must be opaque

  frame.setContentPane(instanz);

  frame.pack();

  frame.setVisible(true);

 }

 

 public static void main(String[] args) {

  javax.swing.SwingUtilities.invokeLater(

   new Runnable() {

    public void run() {

     createAndShowGUI();

    }

  });

 }

  besser zu verstehen:

 public static void main(String[] args) {

  Runnable startProgram = new Runnable() {

   public void run() {

    createAndShowGui();

   }

  };

  SwingUtilities.invokeLater(startProgram);

 }

 

Pausen

 

Pausen erzeugt man mit Hilfe der Methode sleep, der Klasse Thread

 

try {

 Thread.sleep(1000);  //entspricht 1000 Millisekunden

} catch (InterruptedException e) {

}

oder als Methode:

 

public void sleep(long millis) {

 try {

 Thread.sleep(millis);

} catch (InterruptedException e) {

}

Aufruf: sleep(1000);

zurück

 

Graphics2D

Graphics2D ist eine Unterklasse von Graphics und erweitert diese um zahlreiche Methoden. Graphics2D dient als Zeichenfläche zur Ausgabe von Grafiken, Texten etc.

Das Graphics2D-Object einer Komponente erhält man, indem man die Methode public void paint(Graphics g) überschreibt.

Das Graphics2D-Object erhält man durch Casting des Graphics Objektes, Graphics2D g2d = (Graphics2D)g;

zurück

BufferedImage

BufferedImage bedeutet das Zeichnen eines Bildes, bevor es auf dem Bildschirm angezeigt wird. Dieses Zwischenpuffern von Grafiken vermeidet das Flackern bei bewegten Bildern. In den ImageBuffer wird zunächst einmal alles gezeichnet und dann als ganzes auf den Bildschirm kopiert.

import java.awt.image.*;

public void paint(Graphics g) {

    Graphics2D g2d = (Graphics2D)g;

    BufferedImage bi = (BufferedImage)createImage(breite, hoehe);

    Graphics2D big = bi.createGraphics();

    big.setColor(Color.red);

    big.drawRect.....   ...... ......

    //erst jetzt wird BufferedImage angezeigt:

    g2d.drawImage(bi , 0,0,this);

zurück

 

AffineTransform

 

AffineTransform ermöglicht Grafikoperationen wie Verschieben, Rotationen, Zusammensetzen etc.

Rotationen beispielsweise geschehen grundsätzlich um den 0-Punkt. Wenn sich Objekte um die eigene Achse drehen sollen, muss der x, y 0-Punkt sich im Zentrum des Objektes befinden. Man kann aber auch den 0-Punkt des Graphics2D Objectes vom linken oberen Punkt beliebig verschieben.

 

Verschieben des 0-Punktes im Graphics2D Object:

 

public void paint(Graphics g) {

 Graphics2D g2d = (Graphics2D) g;

 AffineTransform at = new AffineTransform(); //AffineTransform Instanz

 //Verschiebung des 0-Punktes um je 100 x und y Punkte

      at.setToTranslation(100, 100);    

      g2d.transform(at);

 //alle Objekte die jetzt eingefügt werden, werden nicht in die obere  //linke Ecke eingefügt, sondern entsprechend versetzt

}

 

Verschieben eines Objectes(unter Verwendung von shapes):

 

public void paint(Graphics g) {

 Graphics2D g2d = (Graphics2D) g;

 AffineTransform at = new AffineTransform(); //AffineTransform Instanz

 at.translate(150,100);       //Verschiebeparameter

      at.rotate(-Math.PI/2);   //dreht das Object

       //PI / 2   = Drehung  90°

       //PI       = Drehung 180°

       //PI * 1,5 = Drehung 270°

       //PI * 2   = Drehung 360°

 Rectangle rect = new Rectangle(0,0,100, 50);

      //Erzeugung eines shape-Objectes, welches rect übernimmt

      Shape shape = at. createTransformedShape(rect);

      g2d.draw(shape);

}

 

Weitere Methoden

 

scale(sx, sy) – Werte > 1 vergrößern das Object entsprechend

      Werte < 1 verkleinern das Object

      negative Werte können das Object spiegeln

 

shear(shx, shy) -

zurück

Zufallszahlen

Um Zufallszahlen zu erzeugen, muss zunächst java.util.* importiert werden. Eine mit der Klasse Random erzeugte Zufallszahl ist positiv oder negativ. Soll auf jeden Fall eine positive Ganzzahl (incl. 0) erzeugt werden, kann dies mit der Math.abs Methode erreicht werden. Weitere Vorgehensweise:

Random rand = new Random();   //Instanz der Klasse Random erzeugen

int a = rand.nextInt(); //pos./neg int wird erzeugt

float b = rand.nextFloat() ; //positiven float der Form 0.39758...

double c = rand.nextDouble(); //positiven double der Form 0.78585.......

int d = Math.abs(rand.nextInt()); //erzeugt positiven int auch 0

int e = Math.abs(rand.nextInt() % 22); //int zwischen 0 und 21

int f = Math.abs(rand.nextInt() % 22) + 4; // int zwischen 4 und 25

zurück

BasicStroke

Objekte der Klasse BasicStroke nehmen Einfluß auf die Strichgestaltung unter der Verwendung von draw. So könnte der Code aussehen:

BasicStroke stroke = new BasicStroke(8f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);

public void paint(Graphics g) {

    g.setStroke(stroke);

    usw. ...;

}

Bedeutungen für die Konstanten:

CAP_BUTT = Strich endet plan abzüglich einer Strichstärke an jeder Endung

CAP_ROUND = Strich hat runde Endungen

CAP_SQUARE = Standardeinstellung, Strich endet plan

Beim Zeichnen von z.B. Polygonen kann man die Ecken wie folgt disignen:

JOIN_BEVEL =  stumpfe Ecken

JOIN_MITER = spitze Ecken

JOIN_ROUND = runde Ecken

zurück

JTextArea

Unterklasse von javax.swing.text.JTextComponent. JTextComponent hält für seine Subklassen viele getter und setter Methoden vor, die auch für JTextArea sehr nützlich sind, wie getText(), getDocument(), setCaretPosition usw.

Ein Beispiel:

// ein Eingabefeld erzeugen mit ActionListener

JTextField eingabefeld = new JTextField(20);

eingabefeld.addActionListener(this);

// eine neue Instanz mit 5 Reihen und 20 Spalten, nicht editierbar

JTextArea textArea = new JTextArea(5, 20);

textArea.setEditable (false);

//Text Feld soll scrollbar sein

JScrollPane scrollPane = new JScrollPane(textArea);

// Text wird vom TextFeld in die TextArea übertragen

public void actionPerformed(ActionEvent e) {

    String text = textField.getText();

    textArea.append(text + “\n”);

    //sorgt dafür, dass das Ende des Textdokumentes zu sehen ist

    textArea.setCaretPosition (textArea.getDocument().getLength());                         

}

zurück

Antialiasing

Antialiasing ist eine Methode, um Kurven nicht so pixelig erscheinen zu lassen (antialiasing = weichzeichnen). Um dies zu erreichen, wird dem Graphics2D Objekt die entsprechende Rendering Methode aufgerufen, die zwei Parameter erwartet, zum einen den Schlüssel, zum anderen den Wert:

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIASING_ON);

Hierbei ist zu beachten, dass die Ausführungsgeschwindigkeit des Programms beeinträchtigt wird.

zurück

Font

 

Unterklasse von java.lang. Object

java.awt.* muss importiert werden

Schriftarten die im Prinzip auf allen Systemen laufen sind:

 

SansSerif”, “Serif” und “ Monospace

 

Konstruktor: Font f = new Font(String name, int style, int size);

 

Für style gibt es die Konstanten PLAIN (standard), BOLD (fett) und ITALIC (kursiv).

Beispiel: g.setFont(new Font(“SansSerif”, Font.PLAIN, 12);

 

     JLabel label = new JLabel(“Labeltext”);

          Font font = new Font(“Monospace”, Font.ITALIC, 14);

          label.setFont(font);

zurück