kramann.info
© Guido Kramann

Login: Passwort:










Informatik3
1 Vom_struct_zur_Klasse
..1.1 Vom_struct_zur_Klasse
..1.2 struct_Programm
..1.3 Klassen_Programm
..1.4 Offene_Fragen
..1.5 Historie
..1.6 Objektabstraktion
..1.7 OO_Kundenverwaltung
..1.8 Objektfaehigkeiten
..1.9 Formatierung
..1.10 Motivation
..1.11 Uebung1
..1.12 Uebung2
2 UML
..2.1 Volumenberechnung
..2.2 UML_Klassendiagramm
..2.3 Konstruktor
..2.4 Statische_Variable
3 Strings
..3.1 Klassenbibliotheken
..3.2 stringUML
..3.3 Uebung3
4 Initialisierungen
4 bluej
5 Zeiger_und_Arrays
..5.1 Zeiger
..5.2 Zeiger_und_Funktion
..5.3 Uebung4
6 Vererbung
..6.1 MesswerteUML
..6.2 MesswerteProgramm
..6.3 VererbungsProgramm
..6.4 Vector
..6.5 Uebung
7 Modifikatoren
..7.1 public_Vererbung
..7.2 protected_Vererbung
8 Listen_und_Templates
..8.1 Containertypen
....8.1.1 ListeUML
....8.1.2 ListeProgramm
..8.2 Templates
....8.2.1 Listentemplate
....8.2.2 STLvectorTemplate
..8.3 Uebung5
..8.4 Uebung6
..8.5 Uebung7
9 Java
..9.1 Uebung
..9.2 GettingStarted
..9.3 Animation
..9.4 Hybrid
..9.5 Threads
10 Delegation
11 LayoutProjekt
12 Fenster
13 Uebung
14 Zwischenprojekt
..14.1 Befehle
..14.2 Planung
..14.3 JNI
..14.4 JNIumsetzen
..14.5 Anwendungsklasse
..14.6 GUI01
..14.7 GUI02
15 Rasterlayout
..15.1 Bilder_Packages
..15.2 interfaces
..15.3 ArrayList
..15.4 clone
..15.5 Uebung
16 Nuetzliches
..16.1 Threads
..16.2 Animation
..16.3 RungeKutta
..16.4 Loesungsansatz
..16.5 Internetprogrammierung
....16.5.1 Codegenerierung
....16.5.2 PHP_Programmierung
....16.5.3 PHP_OOP
....16.5.4 Java
17 Algorithmen
..17.1 RungeKutta
..17.2 Loesungsansatz
..17.3 Evoopt
..17.4 Uebung12
..17.5 Uebung8_2014
..17.6 Ausdruecke
18 Uebung10
19 UML_ALT
..19.1 Flaechenberechnung
..19.2 UML_Flaechenberechnung
..19.3 Implementierung
..19.4 ListeUML
..19.5 ListenImplementierung
..19.6 Anwendung

15.1 Die Verwendung von Packages und das Laden und Darstellen von Bildern

15.1 The use of packages and loading and displaying images (EN google-translate)

15.1 Korzystanie z pakietów oraz ładowanie i wyświetlanie obrazów (PL google-translate)

rl001_fenster.zip - Erste Entwicklungsstufe zu Rasterlayout.

Statt das Raster (Dreierketten) für das Layout automatisch zu zeichnen, wird ein mit LibreOffice Draw erzeugtes Bild mit dem Raster als Hintergrund für die darauf mit paint(..) eingezeichneten Bauteile verwendet.

Instead of automatically drawing the grid (triplets) for the layout, becomes an image created with LibreOffice Draw with the grid as the background for the components marked with paint (..).

Zamiast automatycznego rysowania siatki (trojaczki) dla układu, staje się obrazem utworzonym za pomocą LibreOffice Draw z siatką jako tłem dla części oznaczonych farbą (..).

In einer ersten Programmversion soll ein Fenster mit einer Canvas erzeugt werden, in der dieses Hintergrundbild dargestellt wird.

In a first program version, a window with a canvas is created become, in which this background picture is represented.

W pierwszej wersji programu tworzone jest okno z płótnem stać się, w którym przedstawiony jest ten obraz tła.

Der Vorteil dieser Technik ist, dass nicht implementierte Elemente mit LibreOffice Draw vorher oder nach Erstellung des Layouts ergänzt werden können. So kann das Programm sehr schnell produktiv eingesetzt werden.

The advantage of this technique is having unimplemented elements with it LibreOffice Draw can be added before or after creating the layout. This allows the program to be used productively very quickly.

Zaletą tej techniki jest posiadanie z nią elementów niezaimplementowanych Program LibreOffice Draw można dodać przed lub po utworzeniu układu. Pozwala to na bardzo wydajne wykorzystanie programu.

Verwendetes Hintergrundbild mit den Dreierketten-Lochraster und einem bereits eingezeichneten Mikrocontroller.

Bild 15.1-1: Verwendetes Hintergrundbild mit den Dreierketten-Lochraster und einem bereits eingezeichneten Mikrocontroller.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import hilfsklassen.Bilder;

public class Rasterlayout extends Canvas
{
     private Image rasterbild = null;

     public Rasterlayout()
     {
         rasterbild = Bilder.holeBild("raster.png");

         JFrame frame = new JFrame();
         frame.setBounds(10,10,900,700);
         frame.getContentPane().add(this);
         frame.setVisible(true);          
     }

     public void paint(Graphics g)
     {         
         ....
     }

     public static void main(String[] args)
     {
         Rasterlayout rasterlayout = new Rasterlayout();
     }
}

Code 15.1-1: Rasterlayout.java - Hauptprogramm des Layout-Programms.

Obiger Quelltext stellt das Hauptprogramm dar. Es erbt von Canvas und implementiert deshalb die Methode paint(..). Deren Inhalt ist hier zunächst nicht dargestellt. Das Programm weist gegenüber früheren Beispielen folgende Besonderheiten auf:

The above source code represents the main program. It inherits from Canvas and therefore implements the method paint (..). Their content is not shown here. The program has the following special features compared to previous examples:

Powyższy kod źródłowy reprezentuje program główny. Dziedziczy po Canvas i dlatego implementuje metodę paint (..). Ich treść nie jest tutaj pokazana. Program ma następujące specjalne funkcje w porównaniu do poprzednich przykładów:

  • Es wird eine Klasse aus einem selber erstellten Package importiert. Das Package ist mit "hilfsklassen" benannt. Die importierte Klasse heißt "Bilder".
  • Die Klasse Bilder besitzt eine statische Methode holeBild(..), die es erlaubt eine Bilddatei als Image-Objekt zu erhalten.
UML-Diagramm der Klasse Bilder.

Bild 15.1-2: UML-Diagramm der Klasse Bilder.

Die Klasse Bilder besitzt nur eine einzige Methode. Diese ist statisch und kann deshalb ohne Erzeugen eines Objektes direkt über Angabe des Klassennamens benutzt werden. Dass sie statisch ist, ist in Java durch das Schlüsselwort "static" festgelegt und in UML durch einen Unterstrich.

The Images class has only one method. This is static and can therefore directly without generating an object be used by specifying the class name. That it is static is fixed in Java by the keyword static and in UML by an underscore.

Klasa Images ma tylko jedną metodę. Jest to statyczne i dlatego może bezpośrednio nie generować obiektu użyj, podając nazwę klasy. To, że jest statyczne, jest naprawiane w Javie przez słowo kluczowe static i w UML przez podkreślenie.

package hilfsklassen;

import java.awt.Image;
import java.net.URI;
import java.net.URL;
import java.io.File;
import javax.swing.ImageIcon;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;


public class Bilder
{
    public static Image holeBild(String name)
    {
        try
        {
//Aktueller Pfad (Punkt .) ist der, von dem das Programm gestartet wird:
            File datei = new File("./bilder/"+name);
            Image bild = ImageIO.read(datei);
            return bild;
        }
        catch(Exception e)
        {
            return null;
        }
    }   
}

Code 15.1-2: Quelltext Bilder.java

Am Quelltext von Bilder ist zu sehen, dass über das Schlüsselwort package vermerkt ist, zu welchem Paket (package) die Klasse gehört. Äußerlich ist dies dadurch festgelegt, dass die Klasse in dem Unterordner "hilfsklassen" liegt:

From the source text of pictures you can see that the keyword package is noted to which package belongs the class. Outwardly, this is determined by the fact that the class in the subfolder is helper:

Z tekstu źródłowego obrazków widać, że pakiet słów kluczowych jest zanotowany do którego paczki należy klasa. Zewnętrznie zależy to od faktu, że klasa w podfolderze jest pomocnikiem:

Die Methode holeBild(..) verwendet ihrerseits komfortable Bibliotheksfunktionen: Der Konstruktor File(String) erlaubt es ein eine Datei repräsentierendes Objekt durch Übergabe des Pfades zu erzeugen. Der gerade aktuelle Pfad ist dabei immer derjenige, in dem die Hauptklasse liegt, also hier auf der Ebene von Rasterlayout. Die statische Methode read(..) in der Klasse ImageIO erlaubt es durch Übergabe eines File-Objekts ein ein Bild repräsentierendes Objekt vom Typ Image zu erhalten.

The method holeBild (..) uses comfortable library functions: The constructor File (String) allows to create an object representing a file by passing the path. The currently current path is always the one in which the main class lies, ie here at the level of grid layout. The static method read (..) in the class ImageIO allows to obtain an image-type object of the type Image by passing a file object.

Metoda holeBild (..) wykorzystuje wygodne funkcje biblioteczne: Konstruktor File (String) pozwala utworzyć obiekt reprezentujący plik, przekazując ścieżkę. Aktualna ścieżka jest zawsze tą, w której znajduje się główna klasa, czyli tutaj na poziomie układu siatki. Statyczna metoda read (..) w klasie ImageIO pozwala uzyskać obiekt typu obrazu typu Image, przekazując obiekt pliku.

Verzeichnisstruktur zu obigem Programm: Im Ordner hilfsklassen liegt die Klasse Bilder, in bilder liegt raster.png.

Bild 15.1-3: Verzeichnisstruktur zu obigem Programm: Im Ordner hilfsklassen liegt die Klasse Bilder, in bilder liegt raster.png.

In der Methode paint(..) in Rasterlayout kann nun das geladene Bildobjekt einfach durch Aufruf der Methode drawImage(..) des Objekts g vom Typ Graphics dargestellt werden.

In the paint (..) method in raster layout, the loaded image object can now be easily translated Calling the drawImage (..) method of the g object of type Graphics.

W metodzie malowania (...) w układzie rastrowym załadowany obiekt obrazu można teraz łatwo przetłumaczyć Wywołanie metody drawImage (..) obiektu g typu Graphics.

Um auch Koordinatentransformationen der zu zeichnenden Elemente zu ermöglichen, wird aus dem in paint(..) verfügbaren Graphics-Objekt g durch eine Cast-Operation (Neuer Klassenname in runden klammern vor das Objekt gestellt), ein Graphics2D-Objekt erzeugt werden, das Graphics beerbt, jedoch einige weitere Methoden bereitstellt. Unter anderem translate(..) und rotate(..) mit denen alles was danach dargestellt wird um die übergebenen Parameter transformiert (verdreht bzw. verschoben) dargestellt wird.

In order to also enable coordinate transformations of the elements to be drawn, becomes from the Graphics object g available in paint (..) through a cast operation (New class name in parentheses placed in front of the object), a Graphics2D object which inherits Graphics but provides some more methods. Among other things, translate (..) and rotate (..) with what everything is displayed afterwards transformed (rotated or shifted) by the transferred parameters.

Aby umożliwić również transformacje współrzędnych elementów, które mają zostać narysowane, staje się z obiektu Graficznego g dostępnego w farbie (..) poprzez operację rzutowania (Nowa nazwa klasy w nawiasie umieszczona przed obiektem), obiekt Graphics2D który dziedziczy grafikę, ale zapewnia więcej metod. Między innymi przetłumaczyć (..) i obrócić (..) z czym wszystko jest wyświetlane później przekształcone (obrócone lub przesunięte) przez przesłane parametry.

     public void paint(Graphics g)
     {         
         if(rasterbild!=null)
         {
             g.drawImage(rasterbild,0,0,Color.WHITE,this); 
         }

         Graphics2D g2d = (Graphics2D)g;

         g2d.setStroke(new BasicStroke(
                                       5.0f,                  // Liniendicke
                                       BasicStroke.CAP_ROUND, // Form des Linienendes
                                       BasicStroke.JOIN_ROUND // Verbindung von Polygonlinien
                                      )   
                      ); 
         g2d.setColor(Color.GREEN);

//Transformieren
         g2d.translate(200,400);      
         g2d.rotate(1.0);   

         g2d.drawRect(0,0,200,100);

//Letzte Transformation rückgängig machen!
         g2d.rotate(-1.0);   
         g2d.translate(-200,-400);      


         g2d.translate(400,100);      
         g2d.setColor(new Color(0,0,100));
         g2d.setFont(new Font("Arial",Font.BOLD,50));

         g2d.rotate(-Math.PI*0.5);   
         g2d.drawString("huhu",0,0);

         g2d.rotate(-Math.PI*0.5);   
         g2d.drawString("huhu",0,0);

         g2d.rotate(-Math.PI*0.5);   
         g2d.drawString("huhu",0,0);

         g2d.rotate(-Math.PI*0.5);   
         g2d.drawString("huhu",0,0);

     }

Code 15.1-3: Methode paint(..) in der Klasse Rasterlayout.

Um die Möglichkeiten von Graphics2D aufzuzeigen, werden hier das Bild raster.png dargestellt und darüber einige grafische Elemente gezeichnet. Unter anderem werden Stiftdicke, Liniendarstellung, Font der Schrift eingestellt.

To show the possibilities of Graphics2D, click here the raster.png image is displayed and some graphical elements drawn above it. Among others, pen thickness, line representation, font font set.

Aby pokazać możliwości Graphics2D, kliknij tutaj zostanie wyświetlony obraz raster.png i kilka elementów graficznych narysowanych nad nim. Między innymi grubość pisaka, reprezentacja linii, czcionka ustawione.


Kompilieren von hilfsklassen/Bilder.java: Man geht in das Verzeichnis von Rasterlayout und gibt ein: Javac hilfsklassen/Bilder.java


Entstehende Darstellung bei Start von Rasterlayout.

Bild 15.1-4: Entstehende Darstellung bei Start von Rasterlayout.