Informatik II. Aufgabe 1: Image Viewer ImageViewer.java

Ähnliche Dokumente
DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Einführung in die OOP mit Java

JAVA2D OKTOBER package at.ac.wuwien.examples.swingdemo; 3 import javax.swing.*; 5 public class SimpleGUI extends JFrame {

Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009

84 Wie kann ich einfache Strukturen zeichnen?

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Universität Paderborn Prof. Dr. Stefan Böttcher. Abschluss von Kapitel 2: Programmierung Grafischer Oberflächen mit der Swing-Bibliothek

Grafik in Java. 1 Werkzeugauswahl. 2 Ereignisbehandlung (Listener bzw. Adapter) - 1 -

NTB Druckdatum:

SOFTWARE ENGINEERING BESPRECHUNG ÜBUNG1. Programmverständnis, Dokumentation

GUI Programmierung mit JAVA Swing

Fachhochschule Stuttgart Prof. Uwe Schulz 14. Juli 2005 Hochschule der Medien Klausur Informatik, EDV-Nr (42021) Seite 1 von 4

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java

Plotten von Kreisen ( nach Jack Bresenham ) (C) Ac bis

16 Zeichnen in Swing-Komponenten , Prof. Dr. D. Ratz

Programmieren II. Zeichnen in Swing-Komponenten. Heusch 18 Ratz Institut für Angewandte Informatik

Übung Nr. 20 Freitag, 09:00-11:00 Uhr in E3.301

Datei auswählen und zeilenweise darstellen

GUI-Programmierung. Teil I. Unterlagen zum Modul OOP mit Java V by MOU2/BFH-TI. Berner Fachhochschule Technik und Informatik

Klausur zur Informatik A WS 2001/2002 Name: Korrektor: Punkte: a) Zeichnen Sie zu der nachstehenden Syntax in EBNF die passenden Syntaxdiagramme.

Klausur Softwaretechnik / JAVA Fachbereich BW, für WINFO

Grundlagen der Programmierung (GP) Prof. Dr. H. Schlingloff Joachim Hänsel

Auswahl aus mehreren Alternativen:

Aufbau einer typischen Java-Datei

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Programmieren 2 Übung Semesterwoche 6

Speichern der Benutzereinstellungen

Instrumentierung und Dekodierung

Objektorientierte Software-Entwicklung

Ist eine Softwarekomponente, die dem Benutzer eines Computers die Interaktion mit der Maschine über grafische Symbole erlaubt

Kapitel 2: Grafische Benutzeroberflächen

Appletprogrammierung

Abstrakte Klassen, Interfaces

Einstieg in die Informatik mit Java

DHBW Karlsruhe, Angewandte Informatik Programmieren in JAVA W. Geiger, T. Schlachter, C. Schmitt, W.

Universität Paderborn Prof. Dr. Stefan Böttcher. Kapitel 3: Java Applets

Einführung in die Programmierung für NF. Übung

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Objektorientierte Programmierung Studiengang Medieninformatik

8.6 Visualisierung der Sortieralgorithmen

Einstieg in die Informatik mit Java

Probeklausur Informatik 2 Sommersemester 2013

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Einbindung der Tastatur

Grafikprogrammierung mit Java Teil 1/2

Einführung: Grafische Benutzeroberflächen. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 22

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

Einführung in die Programmierung mit Java

Einführung in die Programmierung für NF. Übung 08

Grafik-Programmierung

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Ausnahmen. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Java-Schulung Grundlagen

double size[][] = {{10.0, 400.0, 20.0, 160.0, 20.0, 400.0, 10.0}, // Columns {10.0, 500.0, 20.0, 180.0, 10.0}}; // Rows

Ausnahmen. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Vorkurs Informatik WiSe 15/16

Algorithmen und Programmierung III

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Hauptklausur: PRGII MD

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Computergrafik 2016 Oliver Vornberger. Kapitel 02: Grafische Benutzeroberflächen

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Ausnahmen. Dr. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Teil 1: Keine Hilfsmittel Bearbeitungszeit: 20 Minuten

Dateien. DVG Dateien 1

13 Applets Applets. Parameter Kommunikation mit dem Browser

MEC: Objektorient. Programmierung - Prüfung

Lösungshinweise/-vorschläge zum Übungsblatt 11: Software-Entwicklung 1 (WS 2017/18)

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

11. GUI-Programmierung mit SWING Überblick

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() {

public class Beispiel1 extends Frame {

II.4.4 Exceptions - 1 -

Einführung in die Informatik

Medientechnik. Übung 2 Java Swing

Problemstellung. Object1:Klasse1. Object2:Klasse2 att1: Klasse1 att2: 9. att1: att2: 17. Klasse1 att1 att2 Klasse2 att1 att2

Exceptions - Klausuraufgaben

Abstrakte Klassen und Schnittstellen. Abstrakte Klassen und Schnittstellen. Abstrakte Klassen und Schnittstellen. Vererbung von abstrakten Methoden

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Application Frameworks and Componentware Wintersemester 2002/03. Komponentenbasierte Programmierung in Java

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

Übungsstunde 9. Einführung in die Programmierung I

Einführung in die Informatik. Lösung zu Übungsblatt 6

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Java Grundlagen 2 - OOP

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Objektorientierte Programmierung Studiengang Medieninformatik

Klausur: Java (Liste P)

Aufgabe 1: Objekte, Klassen, Vererbung (15 Punkte)

Transkript:

Universität Augsburg, Institut für Informatik Sommersemester 2006 Prof. Dr. Werner Kießling 27. Juli 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 12 Aufgabe 1: Image Viewer ImageViewer.java Informatik II import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.filechooser.filefilter; import javax.imageio.*; import java.awt.image.*; import java.awt.geom.*; //Klasse ShowImage class ShowImage extends JComponent { // Position im BufferedImage-Array private int pos; // hier werden die Bilder gespeichert private File[] files; // BufferedImage zum lesen // eines Bildes private BufferedImage bf; // Hoehe und Breite des Bildes private int height, width; // Konstruktor public ShowImage() { pos = -1; height = 0; width = 0; // Ablegen der Bilder in files public void setimages(file[] files) { this.files = files; public void nextimage() throws IOException { // pos ums 1 erhoehen und wieder // von vorne beginnen, wenn man am // Ende der Bilderserie angelangt ist pos = ++pos % files.length; // lesen des Bildes bf = ImageIO.read(files[pos]); // Hoehe und Breite ermitteln setimagesize(); // neu zeichnen repaint();

// setzen der Bildgroesze // nur moeglich, wenn das Bild schon // vollstaendig geladen wurde. // Deshalb wird ein BufferedImage // verwendet private void setimagesize() { width = bf.getwidth(); height = bf.getheight(); public int getimageheight() {return height; public int getimagewidth() {return width; // zurueckgeben des aktuellen Bildes // z.b. zum Speichern public BufferedImage getimage() {return bf; // Hoehe und Breite in einen String schreiben public String tostring() { return "File: " + files[pos].getabsolutepath() + "; Height: " + height + "; Width: " + width; // rotieren des Bildes um theta, // nicht des Graphics-Objektes public void rotate() { // Affine Transformation // Drehung um 90 Grad nach rechts AffineTransform tx = new AffineTransform(0,-1,1,0,0,bf.getWidth()); AffineTransformOp op = new AffineTransformOp( tx, AffineTransformOp.TYPE_BILINEAR); // transformiert bf und speichert das Ergebnis wieder in bf // zweiter Parameter ist null, // da uns die Ergebnisse der Transformation nicht interessieren bf = op.filter(bf, null); // Bildgroesze neu setzen setimagesize(); repaint(); // zeichnen des Bildes protected void paintcomponent(graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.drawimage(bf, 0, 0, this); // Die eigentliche Klasse ImageViewer public class ImageViewer extends JFrame implements MouseListener, KeyListener { private ShowImage si = new ShowImage(); // Dateiauswahldialog JFileChooser jfc = new JFileChooser(); // Konstruktor public ImageViewer() {

super("image Viewer"); setlayout(new BorderLayout()); // zum gleichzeitigen Selektieren mehrerer Dateien jfc.setmultiselectionenabled(true); // Nur Dateien, keine Verzeichnisse jfc.setfileselectionmode(jfilechooser.files_only); // FileFilter setzen // nur gifs, jpgs und pngs jfc.setfilefilter(new FileFilter() { // hierzu muss man die beiden Methoden accept // und getdescription ueberschreiben public boolean accept(file file) { return file.isdirectory() file.getname().tolowercase().endswith(".jpg") file.getname().tolowercase().endswith(".gif") file.getname().tolowercase().endswith(".png"); ); public String getdescription() { return "*.jpg;*.gif;*.png"; add(si, BorderLayout.CENTER); addmouselistener(this); addkeylistener(this); setdefaultcloseoperation(jframe.exit_on_close); setsize(600, 400); setvisible(true); // laden der Bilder private void loadimages() { jfc.showopendialog(null); File[] files = jfc.getselectedfiles(); try { si.setimages(files); // erstes Bild anzeigen si.nextimage(); // anpassen der Fenstergroesze setframesize(); // setzen der Titelleiste setimagetitle(); catch (IOException e) { // Fehler abfangen nextimageerror(e.getlocalizedmessage()); // speichern der Bilder private void saveimage() { if (jfc.showsavedialog(null) == JFileChooser.APPROVE_OPTION) { try { // schreiben des BufferedImage ImageIO.write(si.getImage(), "png", jfc.getselectedfile());

catch (IOException ioe) { // Fehler abfangen JOptionPane.showMessageDialog(null, "Save Error " + ioe.getlocalizedmessage(), "Error", JOptionPane.ERROR_MESSAGE); // wird aufgerufen, falls ein Fehler // beim Anzeigen eines Bildes auftritt private void nextimageerror(string error) { JOptionPane.showMessageDialog(null, "Next Image Error " + error, "Error", JOptionPane.ERROR_MESSAGE); // setzen der Titelleiste private void setimagetitle() { this.settitle("image Viewer - " + si.tostring()); // anpassen der Fenstergroesze private void setframesize() { // der Rahmen des Fensters muss beruecksichtigt werden // damit die Fenstergroesze richtig angepasst wird int left = getinsets().left; // 3 int top = getinsets().top; // 29 int right = getinsets().right; // 3 int bottom = getinsets().bottom; // 3 this.setsize(si.getimagewidth() + left + right, si.getimageheight() + top + bottom); // Methoden von MouseListener public void mouseclicked(mouseevent e) { // linke Maustaste if (e.getmodifiers() == MouseEvent.BUTTON1_MASK) { try { si.nextimage(); setframesize(); setimagetitle(); catch (IOException ioe) { nextimageerror(ioe.getlocalizedmessage()); ; // mittlere Maustaste if (e.getmodifiers() == MouseEvent.BUTTON2_MASK) { loadimages();

// Emulation der mittleren Maustaste // durch druecken beider Tasten bei einer // 2-Tasten-Maus public void mousepressed(mouseevent e) { if ((e.getmodifiersex() & (MouseEvent.BUTTON1_DOWN_MASK MouseEvent.BUTTON3_DOWN_MASK)) == (MouseEvent.BUTTON1_DOWN_MASK MouseEvent.BUTTON3_DOWN_MASK)) { loadimages(); ; public void mousereleased(mouseevent e) {; public void mouseentered(mouseevent e) {; public void mouseexited(mouseevent e) {; public void keyreleased(keyevent e) {; public void keypressed(keyevent e) {; // Tastaturereignisse public void keytyped(keyevent e) { // rotieren if (e.getkeychar() == r ) { si.rotate(); setframesize(); setimagetitle(); // speichern if (e.getkeychar() == s ) { saveimage(); ; // beenden if (e.getkeychar() == q ) { System.exit(0); // main-methode public static void main(string[] args) { new ImageViewer();

// paintcomponent public void paintcomponent(graphics g) { switch (number) { case 0: draw5(g); case 1: case 2: draw5(g); case 3: case 4: Aufgabe 2: Applet - Digitale Anzeige Segment.java import java.awt.*; import javax.swing.*; // Klasse Segment class Segment extends JComponent { // anzuzeigende Ziffer private int number; // Koordinaten fuer die Segmente private int[] x147 = { 20, 30, 60, 70, 60, 30, 20 ; private int[] x25 = { 5, 15, 25, 25, 15, 5, 5 ; private int[] x36 = { 65, 75, 85, 85, 75, 65, 65 ; private int[] y23 = { 30, 20, 30, 60, 70, 60, 30 ; private int[] y56 = { 90, 80, 90, 120, 130, 120, 90 ; // Konstruktor Segment() {setsize(90, 150); // setzen der Ziffer public void set(int n) { number = n; repaint();

case 5: case 6: draw5(g); case 7: case 8: draw5(g); case 9: default: // Methoden zum Fuellen der Segmente private void draw1(graphics g) { int[] y = { 15, 5, 5, 15, 25, 25, 15 ; g.fillpolygon(x147, y, 7); private void draw2(graphics g) { g.fillpolygon(x25, y23, 7); private void draw3(graphics g) { g.fillpolygon(x36, y23, 7);

private void draw4(graphics g) { int[] y = { 75, 65, 65, 75, 85, 85, 75 ; g.fillpolygon(x147, y, 7); private void draw5(graphics g) { g.fillpolygon(x25, y56, 7); private void draw6(graphics g) { g.fillpolygon(x36, y56, 7); private void draw7(graphics g) { int[] y = { 135, 125, 125, 135, 145, 145, 135 ; g.fillpolygon(x147, y, 7); Counter.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Counter extends JPanel implements MouseListener { // Segmente fuer den Hunderter, Zehner und Einer private Segment hunderter, zehner, einer; private int counter; // Konstruktor public Counter() { setsize(160, 280); setlayout(null); hunderter = new Segment(); zehner = new Segment(); einer = new Segment(); // setzen der Positionen // einfach mit setlocation hunderter.setlocation(0, 0); zehner.setlocation(90, 0); einer.setlocation(180, 0); // hinzufuegen der Segmente add(hunderter); add(zehner); add(einer); // MouseListener einer.addmouselistener(this); zehner.addmouselistener(this); hunderter.addmouselistener(this); // Konstruktor mit Zahl public Counter(int n) {

setcounter(n); public void mouseclicked(mouseevent e) { inccounter(); public void mousereleased(mouseevent e) { public void mousepressed(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { // setzen des Zaehlers public void setcounter(int i) { counter = i; einer.set(i % 10); zehner.set((i / 10) % 10); hunderter.set((i / 100) % 10); repaint(); public int getcounter() { return counter; // um eins hochzaehlen public void inccounter() { setcounter((getcounter() + 1) % 1000); CounterApplet.java import javax.swing.*; // CounterApplet Klasse public class CounterApplet extends JApplet { Counter c; // initialisieren des Applets public void init() { // Counter auf 0 setzen c = new Counter(0); add(c); validate();