DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung



Ähnliche Dokumente
Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Datei auswählen und zeilenweise darstellen

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

GUI Programmierung mit JAVA Swing

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

Swing Lernen am Code Teil 1

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

Java Projekt: Tic Tac Toe + GUI

von Anja Austermann Drag and Drop

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

GUI Programmierung in Java

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Javakurs zu Informatik I. Henning Heitkötter

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Große Übung Praktische Informatik 1

Konvertieren von Settingsdateien

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Programmieren in Java

Dokumentation des Projektes Tic Tac Toe

Java: Vererbung. Teil 3: super()

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Einführung in die Programmierung für Wirtschaftsinformatik

Psyprax GmbH. Wichtig für alle Netzwerkinstallationen: Psyprax GmbH

NTB Druckdatum:

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Einführung in Javadoc

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

11. GUI-Programmierung mit SWING Überblick

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

Übung - Datensicherung und Wiederherstellung in Windows 7

2A Basistechniken: Weitere Aufgaben

Objektorientierte Programmierung

DOKUMENTATION. Outlook Vorlagen. in Microsoft Office Outlook 2007 einrichten.

Auswertung erstellen: Liste mit -

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in die Programmierung

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Dateipfad bei Word einrichten

Programmieren in Java

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

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

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Ihr CMS für die eigene Facebook Page - 1

Verbuchung von Zahlungseingängen über das PayPal-Konto

Eltako-FVS. Lizenzaktivierung ohne Internetverbindung

Arrays Fortgeschrittene Verwendung

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Programmierkurs Java

Psyprax GmbH. Netzwerk Installation unter XP. Wichtig für alle Netzwerkinstallationen: Psyprax GmbH

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Anleitung zum Erstellen und Auspacken eines verschlüsselten Archivs zur Übermittlung personenbezogener Daten per 1

Kurzanleitung zur Installation des OLicense-Servers in Verwendung mit SimDiff/SimMerge

Outlook 2013 Ablauf des Einrichtens in Outlook, um s zu signieren und/ oder verschlüsseln zu können

Informatik II. Aufgabe 1: Image Viewer ImageViewer.java

Studentische Lösung zum Übungsblatt Nr. 7

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Objektorientierte Programmierung

Arbeiten mit dem Outlook Add-In

Hinweis, sofern Sie Probleme beim Download der Excel-Dateien für das LIOS-Makro haben:

Die Dateiablage Der Weg zur Dateiablage

Anleitung zur Webservice Entwicklung unter Eclipse

ClubWebMan Veranstaltungskalender

CVR Seniorentreff vom 04. und Serienbriefe/Seriendruck. Serienbriefe / Seriendruck

Java-Schulung Grundlagen

Test-Driven Design: Ein einfaches Beispiel

5. Tutorium zu Programmieren

virtuos Leitfaden für die virtuelle Lehre

Outlook 2000 Thema - Archivierung

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übung - Verwendung der Systemwiederherstellung in Windows XP

my.ohm Content Services Autorenansicht Rechte

Tipps und Tricks zu Netop Vision und Vision Pro

Erste Schritte mit Sharepoint 2013

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

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

Frankieren in Microsoft Word mit dem E Porto Add in der Deutschen Post

Typumwandlungen bei Referenztypen

Grafische Benutzeroberfläche mit Glade und Python

-Verschlüsselung mit Geschäftspartnern

Kommunikations-Parameter

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Anleitung Anki V 1.2 / Mille feuilles

Version NotarNet Bürokommunikation. Bedienungsanleitung für den ZCS-Import-Assistenten für Outlook

04 - Actions. Actions

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Zählen von Objekten einer bestimmten Klasse

Wie kann ich in der Backstage-Ansicht eigene Dokumentationen einbinden?

Anleitung zur Datensicherung und -rücksicherung in der VR-NetWorld Software

Primitive Datentypen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Anleitungen zum Publizieren Ihrer Homepage

Wechsel einer auslaufenden VR-NetWorld-Card

Installation des Zertifikats

Transkript:

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung Aufgabe Editor package BA.GUI.Swing; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.logging.level; import java.util.logging.logger; import javax.swing.*; import javax.swing.filechooser.filefilter; public class Editor extends JFrame { /* Hier werden alle Komponenten vereinbart auf die man später direkt * zugreifen möchte, um ihren Text oder um ihre Attribute zu ändern. * Man kann auch Events auswerten wenn man ein Handle auf die Komponenten * bereithält. Allerdings geht das ebenfalls über den Namen von Komponenten, * der dafür explizit gesetzt werden muss! */ Container c; JMenuBar menu; JMenu dateimenu; JMenu bearbeitenmenu; JEditorPane editfield; Component schliessencomp; Component speicherncomp; Component speichernuntercomp; Component speichernwebsitecomp; /* Hier werden Namen für einzelne Komponenten definiert. * Über diese Namen kann man diese identifizieren, z.b. wenn ein Ereignis * ausgelöst wurde. */ private final String NEU = "NEU"; private final String OEFFNEN = "OEFFNEN"; private final String SCHLIESSEN = "SCHLIESSEN"; private final String SPEICHERN = "S"; private final String SPEICHERNUNTER = "S_U"; private final String SPEICHERNWEBSITE = "S_WEBSITE"; private final String BEENDEN = "BEENDEN"; // Weitere Variablen im Zusammenhang mit der Oberfläche int width = 600; int height = 400; /* Hier kommen Felder für die Anwendung Editor */ boolean documentopen = false; // Ist derzeit ein Dokument geöffnet? boolean backupavailable = false; boolean actionperformed = false; // Ist "Rückgeängig möglich? // Wurde eine Aktion ausgeführt, // die wiederholt werden kann? String[] lastfiles = {"bilanz_2007.doc", "quatalsbericht_2008_01.doc", "ziele.doc"; String documenttitle = "Dokument1"; File datei = null;

/** Konstruktor für den Editor. * Erzeugt erstmalig Menü und Arbeitsfläche. */ Editor() { // Einstellungen für das Fenster (JFrame) UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); catch (Exception ex) { this.settitle(documenttitle); setsize(width, height); c = this.getcontentpane(); c.setlayout(new BorderLayout()); // Arbeitsfläche erzeugen editfield = new JEditorPane(); editfield.settext(""); editfield.setfont(new Font("Courier New", Font.PLAIN, 12)); // Scrollbalken erzeugen. Über diesen wird editfield eingebunden! JScrollPane editorscrollpane = new JScrollPane(editField); editorscrollpane.setverticalscrollbarpolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); editorscrollpane.sethorizontalscrollbarpolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); editorscrollpane.setpreferredsize(new Dimension(250, 145)); editorscrollpane.setminimumsize(new Dimension(10, 10)); c.add(editorscrollpane, BorderLayout.CENTER); // Menü erzeugen menu = new JMenuBar(); dateimenu = setdateimenu(); menu.add(dateimenu); bearbeitenmenu = setbearbeitenmenu(); menu.add(bearbeitenmenu); menu.setsize(width, 30); c.add(menu, BorderLayout.NORTH); setmenu(); // Enable etc. setzen // Alles anzeigen c.setvisible(true); private void setmenu() { this.settitle(documenttitle); schliessencomp.setenabled(!isempty()); speicherncomp.setenabled(datei!= null); speichernuntercomp.setenabled(documentopen); speichernwebsitecomp.setenabled(documentopen);

/** Produziert das "Datei"-Menu. * DEMO: Nicht alle Menüpunkte haben eine Funktion. */ private JMenu setdateimenu() { dateimenu = new JMenu("Datei"); dateimenu.setmnemonic(keyevent.vk_d); dateimenu.add(newjmenuitem(neu, "Neu...", true, KeyEvent.VK_N, editfield.settext(""); documenttitle = "Neue Datei"; boolean backupavailable = false; )); dateimenu.add(newjmenuitem(oeffnen, "Öffnen...", true, KeyEvent.VK_F, dateioeffnen(); )); schliessencomp = newjmenuitem(schliessen, "Schließen",!this.isEmpty(), KeyEvent.VK_C, null); dateimenu.add(schliessencomp); speicherncomp = newjmenuitem(speichern, "Speichern", datei!= null, KeyEvent.VK_S, if (datei == null) // Wenn kein Dateiname bekannt { datei = fileselect(); // Danach fragen dateispeichern(datei); ); dateimenu.add(speicherncomp); speichernuntercomp = newjmenuitem(speichernunter, "Speichern unter...", documentopen, KeyEvent.VK_S, null); dateimenu.add(speichernuntercomp); speichernwebsitecomp = newjmenuitem(speichernwebsite, "Als Webseite speichern...", documentopen, KeyEvent.VK_T, null); dateimenu.add(speichernwebsitecomp); dateimenu.add(newjmenuitem("suchen...")); dateimenu.add(newjmenuitem("versionen...")); dateimenu.add(newjmenuitem("webseitenvorschau")); dateimenu.add(newjmenuitem("seite einrichten...")); dateimenu.add(newjmenuitem("seitenansicht")); dateimenu.add(newjmenuitem("drucken..."));

/* Der nächste Menüpunkt hat ein Untermenü, ist also selbst ein * Container (JMenu) und nimmt eigene MenuItems auf. */ JMenu sendenan = new JMenu("Senden an"); sendenan.add(newjmenuitem("e-mail-empfänger")); sendenan.add(newjmenuitem("e-mail-empfänger (zur Überarbeitung)...")); sendenan.add(newjmenuitem("e-mail-empfänger (als Anlage)...")); sendenan.add(newjmenuitem("verteilerempfänger...")); sendenan.add(newjmenuitem("onlinebesprechungsteilnehmer")); sendenan.add(newjmenuitem("exchange-ordner...")); sendenan.add(newjmenuitem("fax-empfänger...")); sendenan.add(new JSeparator()); sendenan.add(newjmenuitem("microsoft Powerpoint")); dateimenu.add(sendenan); // Ganzes Untermenu einfügen // Und hier gehts weiter im ursprünglichen Menu dateimenu.add(new JMenuItem("Eigenschaften")); // Hier werden die zuletzt geöffneten Files angezeigt. Größe ist dynamisch. for (String file : lastfiles) { dateimenu.add(newjmenuitem(file, true)); dateimenu.add(newjmenuitem(beenden, "Beenden", true, KeyEvent.VK_E, if (JOptionPane.showConfirmDialog(null, "Wirklich beenden?", "Beenden", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { System.exit(0); )); return dateimenu;

/** Produziert das "bearbeiten"-menu * DEMO: Nicht alle Menüpunkte haben eine Funktion. */ private JMenu setbearbeitenmenu() { JMenu bearbeitenmenu = new JMenu("Bearbeiten"); bearbeitenmenu.setmnemonic(keyevent.vk_b); JMenuItem rueckgaengig; // Die nächsten zwei MenuItems werden direkt erzeugt if (backupavailable) { rueckgaengig = new JMenuItem("Rückgängig"); else { rueckgaengig = new JMenuItem("Rückgängig: nicht möglich"); rueckgaengig.setenabled(backupavailable); bearbeitenmenu.add(rueckgaengig); JMenuItem wiederholen; if (actionperformed) { wiederholen = new JMenuItem("Wiederholen"); else { wiederholen = new JMenuItem("Wiederholen: nicht möglich"); wiederholen.setenabled(actionperformed); bearbeitenmenu.add(wiederholen); // Dies folgenden MenuItems werden über die u.s. Methoden erzeugt bearbeitenmenu.add(newjmenuitem("ausschneiden")); bearbeitenmenu.add(newjmenuitem("kopieren")); bearbeitenmenu.add(newjmenuitem("office-zwischenablage")); bearbeitenmenu.add(newjmenuitem("einfügen")); bearbeitenmenu.add(newjmenuitem("inhalte einfügen")); bearbeitenmenu.add(newjmenuitem("als Hyperlink einfügen")); bearbeitenmenu.add(newjmenuitem("löschen")); bearbeitenmenu.add(newjmenuitem("alles markieren")); bearbeitenmenu.add(newjmenuitem("suchen...")); bearbeitenmenu.add(newjmenuitem("ersetzen...")); bearbeitenmenu.add(newjmenuitem("gehe zu...")); bearbeitenmenu.add(newjmenuitem("verknüpfungen...")); bearbeitenmenu.add(newjmenuitem("objekt")); return bearbeitenmenu; /** Produziert ein neues JMenuItem */ JMenuItem newjmenuitem(string name, String text, boolean enable, int mnemonic, ActionListener al) { JMenuItem mi = new JMenuItem(text); mi.setname(name); // Namen setzen. Intern, wird nicht angezeigt! mi.setenabled(enable); // Aktiviert oder nicht? if (al!=null) mi.addactionlistener(al); // Action-Listener hinzufügen if (mnemonic!= ' ') // ggf. Tastaturkürzel hinzufügen { mi.setmnemonic(mnemonic); return mi; /** Kurzfassung für die ausführliche Version von newjmenuitem */ JMenuItem newjmenuitem(string text, boolean enable) { return newjmenuitem(text, text, enable, ' ', null);

/** Kurzfassung für die ausführliche Version von newjmenuitem */ JMenuItem newjmenuitem(string text) { return newjmenuitem(text, text, true, ' ', null); /** Sagt, ob der Editor leer ist */ public boolean isempty() { return (editfield.gettext() == null) editfield.gettext().equalsignorecase(""); /** Öffnen einer neuen Datei inkl. Dateiauswahlbox */ public void dateioeffnen() { File f = fileselect(); if (f!= null) { datei = f; documenttitle = datei.getname(); editfield.settext(dateilesen(datei)); documentopen = true; /** Einlesen einer neuen Datei in einen String */ public String dateilesen(file datei) { if (datei!= null) { BufferedReader br = null; StringBuffer inhalt = new StringBuffer(); br = new BufferedReader(new FileReader(datei)); while (br.ready()) { inhalt.append(br.readline() + "\n"); catch (FileNotFoundException ex) { catch (IOException ex) { finally { br.close(); catch (IOException ex) { Logger.getLogger(Editor.class.getName()).log(Level.SEVERE, null, ex); return inhalt.tostring(); else { return "";

/** Speichern des Inhalts von editfield einer Datei */ public void dateispeichern(file datei) { if (datei!= null) { BufferedWriter bw = null; bw = new BufferedWriter(new FileWriter(datei)); bw.write(editfield.gettext()); catch (FileNotFoundException ex) { catch (IOException ex) { finally { bw.close(); catch (IOException ex) { Logger.getLogger(Editor.class.getName()).log(Level.SEVERE, null, ex); /** Öffnen einer Dateiauswahlbox. * Gibt null zurück, wenn keine Datei ausgewählt wurde. */ public File fileselect() { JFileChooser fc = new JFileChooser(); fc.setfilefilter(new FileFilter() { public boolean accept(file f) { return f.isdirectory() f.getname().tolowercase().endswith(".txt"); public String getdescription() { return "Textdateien"; ); if (fc.showopendialog(null) == JFileChooser.APPROVE_OPTION) { return fc.getselectedfile(); return null; /** Hier startet der Editor */ public static void main(string[] args) { Editor me = new Editor(); me.setdefaultcloseoperation(jframe.exit_on_close); me.setvisible(true);