 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
|
myJava.rwp |
|
|
|
 |
|
|
|
|
|
|
|
JAVA Klassen, Methoden und ihre Anwendung |
|
|
|
AffineTransform Antialiasing BasicStroke
BufferedImage Font Graphics2D
JLabel JFormattedTextFields JTextArea
ThreadsZufallszahlen |
|
|
|
Abkürzungen API
- application program interfaces (in Java bereits integriert)CDC - Connected Device Configuration CLDC - Connected Limited Device Configuration CVM - C Virtuel Machine GUI – graphical user interfaceJ2EE - Java2 Enterprise Edition J2ME - Java2 Micro Edition
J2SE – Java2 Standard EditionJAR – Java Archive JDK – Java Development Kit JFC –
Java Foundation ClassesJRE – 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 |
|
|
|
BufferedImageBufferedImage 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) {
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 |
|
|
|
ZufallszahlenUm 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 |
|
|
|
AntialiasingAntialiasing 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.
Objectjava.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 |
|
|
|
 |
|
|
|
|
|