Olympische Flagge – Grafikprogrammierung Tutorial

Wer kennt sie nicht, die Olympischen Spiele. Alle vier Jahre treffen sich die Hochleistungssportler um sich einander zu messen. Wie schön wäre es doch, die Olympische Flagge einmal in Java zu „malen“. Wie das geht, wird jetzt gezeigt.

  1. Neues Projekt erstellen: de.michel.graphic.olympia
  2. Paket erstellen: olympia
  3. Kreis.java erstellen
  4. Rechteck.java erstellen
  5. Text.java erstellen
  6. Olympia.java erstellen
  7. OlympiaFlagge.java erstellen

Quellcode

Zum Erstellen der Olympischen Flagge benötigen wir in erster Linie die Kreise. Um das ganze etwas aufwändiger zu gestalten wird zusätzlich ein Rahmen um die Flagge gezogen. Ein Bezeichner darf natürlich auch nicht fehlen.

Kreis.java

Fünf Ringe werden benötigt, aber nur eine Klasse. Die Funktion drawOval() zeichnet die Ringe in beliebiger Größe.

package olympia;

import java.awt.Graphics;

public class Kreis {

	private int x;
	private int y;
	private int r;

	/**
	 * @param x Koordinate
	 * @param y Koordinate
	 * @param r Radius
	 */
	public Kreis(int x, int y, int r) {
		this.x = x;
		this.y = y;
		this.r = r;
	}

	public void zeichnen(Graphics painter) {
		// drawOval(x, y, width, height)
		painter.drawOval(x - r, y - r, 2 * r, 2 * r);
		painter.drawOval(x - r + 1, y - r + 1, 2 * (r - 1), 2 * (r - 1));
	}
}

[ad#co-3]

Rechteck.java

Um die Flagge nicht frei in der Luft schweben zu lassen, ziehen wir einen Rahmen. Hierzu hilft die Funktion drawRect().

package olympia;

import java.awt.Graphics;

public class Rechteck{
	
	private int x;
	private int y;
	private int width;
	private int height;
	
	/**
	 * @param x Koordinate
	 * @param y Koordinate
	 * @param width Breite
	 * @param height Höhe
	 */
	public Rechteck(int x, int y, int width, int height)
	{
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
	}
	
	public void zeichnen(Graphics pinsel)
	{
		// drawRect(x, y, width, height)
		pinsel.drawRect(x - width / 2, y - height / 2, width, height);
		pinsel.drawRect(x + 1 - width / 2, y + 1 - height / 2, width, height);
	}
}

Text.java

Die Methode drawString() zeichnet den olympischen Text.

package olympia;



import java.awt.FontMetrics;

import java.awt.Graphics;



public class Text {



	private int x;

	private int y;

	private String text;



	/**

	 * @param x Koordinate

	 * @param y Koordinate

	 * @param text Text

	 */

	public Text(int x, int y, String text) {

		this.x = x;

		this.y = y;

		this.text = text;

	}



	public void zeichnen(Graphics painter) {

		FontMetrics metrics = painter.getFontMetrics();

		int length = metrics.stringWidth(text);

		painter.drawString(text, x - length / 2, y);

		painter.drawString(text, x - length / 2 + 1, y);

	}

}

Olympia.java

Die Olympia Klasse zeichnet die Flagge mit Hilfe der zuvor erstellten Klassen.

package olympia;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JComponent;

public class Olympia extends JComponent {
	
	/**
	 * Die Methode paint() wird von JComponent überschrieben und
	 * erstellt die Olympische Flagge mit Hilfe der Basisklassen
	 * Kreis, Rechteck und Text.
	 */
	@Override 
	public void paint(Graphics painter) {

		// Die Farbe der Zeichnungen wählen (hier: schwarz)
		painter.setColor(new Color(0, 0, 0));
		
		// Rechteck erzeugen
		Rechteck r1 = new Rechteck(165, 110, 310, 200);
		r1.zeichnen(painter);
		
		// Kreise mit den entsprechenden Koordinaten erzeugen
		// sowie dem Radiuswert von 45
		Kreis k1 = new Kreis(65, 65, 45);
		k1.zeichnen(painter);
		Kreis k2 = new Kreis(165, 65, 45);
		k2.zeichnen(painter);
		Kreis k3 = new Kreis(265, 65, 45);
		k3.zeichnen(painter);
		Kreis k4 = new Kreis(115, 110, 45);
		k4.zeichnen(painter);
		Kreis k5 = new Kreis(215, 110, 45);
		k5.zeichnen(painter);
		
		// Schrift erzeugen
		painter.setFont(new Font("Courier New", Font.BOLD, 20));
		Text t1 = new Text(165, 200, "Olympia");
		t1.zeichnen(painter);
	}
}

OlympiaFlagge.java

Damit die Zeichnungen auch auf einer Oberfläche zu sehen ist, wird die Klasse OlympiaFlagge.java benötigt.

package olympia;

import javax.swing.JFrame;

public class OlympiaFlagge extends JFrame {

	public OlympiaFlagge() {

		// eine neue Olympia Flagge hinzufügen
		add(new Olympia());
		setTitle("Olympische Flagge");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(340, 250);
		setLocation(100, 100);
		setVisible(true);
	}

	public static void main(String[] args) {
		new OlympiaFlagge();
	}

}

Ergebnis

Olympische Flagge