Java-Pattern Tutorial

Kapitel
Grundlagen Beispielcode UML-Darstellung Übung
Home

Einführung

GUI programmieren

Patterns

   MVC

Verzeichnisse

Lösung

Aufgabe 1:

a) In welchem Zusammenhang wird das MVC-Muster verwendet?

  • Grafische Benutzeroberflächen, da der Code möglichst lange weiterverwendet werden soll.
  • Verschiedene Darstellung der Daten.

b) Aus welchen drei Elementen besteht das MVC-Muster und welche Aufgaben übernehmen diese Elemente?

Model: Enthält Daten. Ist der langlebigste Programmteil von allen.

View: Grafische Benutzeroberfläche. Stellt die Daten dar.

Controller: Anwendungslogik. Mit ihr tritt der Benutzer in kontakt mit dem Programm.

Aufgabe 2:

Realisieren sie ein Programm nach dem MVC-Muster, das die folgenden Aufgaben erfüllt.

a) In das obere Textfeld wird eine Zeichenkette eingegeben.

b) Aktionen ausführen, die den Schaltflächen entsprechen.

c) Klassendiagramm und Sequenzdiagramm dazu entwerfen

Bitte beginnen sie mit dem Klassen- und Sequenzdiagramm.

Abb. 3.10: Oberfläche Übung 2

UML-Diagramme

Klassendiagramm

Abb. 3.11: Klassendiagramm zur Übung 2

Sequenzdiagramm

Abb. 3.12: Sequenzdiagramm Übung 2

Quelltexte

public class C_Uebung2Hauptprogrmam {

 public static void main(String[] args) {

  C_Uebung2Controller c = new C_Uebung2Controller();

  c.starten();
 }
}

Tab. 3.5: Datei C_Uebung2Hauptprogrmam.java

import java.awt.event.*;

public class C_Uebung2Controller implements MouseListener, WindowListener{

 // Partner
 UI_Uebung2View w;
 Text_Uebung2Model m;

 public C_Uebung2Controller() {

  // leer
 }

 // Getter/Setter Methoden
 void setW(UI_Uebung2View view) {

  this.w = view;
 }

 UI_Uebung2View getW() {

  return w;
 }

 void setM(Text_Uebung2Model model) {

  this.m = model;
 }

 Text_Uebung2Model getM() {

  return m;
 }

 void starten() {

  w = new UI_Uebung2View();
  m = new Text_Uebung2Model();

  // View
  w.setC(this); // Controller registrieren
  w.setM(m); // View registrieren
  w.starten();

  // Model
  m.setC(this); // Controller registrieren
  m.setW(w); // View registrieren
 }

 //Ereignisbehandlung
 // Alle Methoden des Interface WindowListener
 public void windowClosing(WindowEvent we) {

  System.exit(0);
 }

 public void windowOpened(WindowEvent we) {}
 public void windowActivated(WindowEvent we) {}
 public void windowClosed(WindowEvent we) {}
 public void windowDeactivated(WindowEvent we) {}
 public void windowDeiconified(WindowEvent we) {}
 public void windowIconified(WindowEvent we) {}

 // Alle Methoden des Interface MouseListener
 public void mouseClicked(MouseEvent me) {

  String eingabe = w.txtEingabe.getText(); 
  m.setZeichenkette(eingabe);

  Object o = me.getSource();

  if(o.equals(w.btnGrossbuchstaben)){

   m.gross();
  }
  else {

   if(o.equals(w.btnKleinbuchstaben)) {

    m.klein();
   }
   else {

    m.laenge();
   }
  }

  w.anzeigen();
 }

 public void mouseReleased(MouseEvent me) {}
 public void mousePressed(MouseEvent me) {}
 public void mouseEntered(MouseEvent me) {}
 public void mouseExited(MouseEvent me) {}
}

Tab. 3.6: Datei C_Uebung2Controller.java

import java.awt.*;

public class UI_Uebung2View extends Frame{

 // Partner
 C_Uebung2Controller c;
 Text_Uebung2Model m;

 TextField txtEingabe, txtAusgabe;
 Label lblEingabe, lblAusgabe;
 Button btnGrossbuchstaben, btnKleinbuchstaben, btnLaenge;

 public UI_Uebung2View() {

  // Fenster
  super("MVC Uebung 2");
  this.setLocation(200,200);
  this.setSize(400,300);
  this.setBackground(Color.lightGray);
  this.setLayout(null);

  // Label lblEingabe
  lblEingabe = new Label("Bitte Zeichenfolge eingeben:");
  lblEingabe.setLocation(20,30);
  lblEingabe.setSize(180,30);
  this.add(lblEingabe);

  // TextField txtEingabe
  txtEingabe = new TextField("");
  txtEingabe.setLocation(20,60);
  txtEingabe.setSize(180,20);
  this.add(txtEingabe);

  // Button btnGrossbuchstaben
  btnGrossbuchstaben = new Button("GROSSBUCHSTABEN");
  btnGrossbuchstaben.setLocation(20,100);
  btnGrossbuchstaben.setSize(140,30);
  this.add(btnGrossbuchstaben);

  // Button btnKleinbuchstaben
  btnKleinbuchstaben = new Button("kleinbuchstaben");
  btnKleinbuchstaben.setLocation(170,100);
  btnKleinbuchstaben.setSize(120,30);
  this.add(btnKleinbuchstaben);

  // Button btnLaenge
  btnLaenge = new Button("Laenge");
  btnLaenge.setLocation(300,100);
  btnLaenge.setSize(80,30);
  this.add(btnLaenge);

  // Label lblAusgabe
  lblAusgabe = new Label("Zeichenfolge verarbeitet:");
  lblAusgabe.setLocation(20,150);
  lblAusgabe.setSize(180,30);
  this.add(lblAusgabe);

  // TextField txtAusgabe
  txtAusgabe = new TextField("");
  txtAusgabe.setLocation(20,180);
  txtAusgabe.setSize(180,20);
  this.add(txtAusgabe);
 }

 // Getter/Setter Methoden
 void setC(C_Uebung2Controller controller) {

  this.c = controller;
 }

 C_Uebung2Controller getc() {

  return c;
 }

 void setM(Text_Uebung2Model model) {

  this.m = model;
 }

 Text_Uebung2Model getM() {

  return m;
 }

 void starten() {

  btnGrossbuchstaben.addMouseListener(this.c);
  btnKleinbuchstaben.addMouseListener(this.c);
  btnLaenge.addMouseListener(this.c);
  this.addWindowListener(this.c);

  this.setVisible(true);
 }

 void anzeigen() {

  String ausgabe = m.getZeichenkette();

  txtAusgabe.setText(ausgabe);

  txtEingabe.requestFocus();
 }
}

Tab. 3.7: Datei: UI_Uebung2View.java

public class Text_Uebung2Model {

 // Partner
 UI_Uebung2View w;
 C_Uebung2Controller c;

 // Attribut
 private String zeichenkette;
 private int zkLaenge;

 // Getter/Setter Methoden
 void setC(C_Uebung2Controller controller) {

  this.c = controller;
 }

 C_Uebung2Controller getc() {

  return c;
 }

 void setW(UI_Uebung2View view) {

  this.w = view;
 }

 UI_Uebung2View getW() {

  return w;
 }

 void setZeichenkette(String zeichenkette) {

  this.zeichenkette = zeichenkette;
 }

 String getZeichenkette() {

  return zeichenkette;
 }

 void setZkLaenge(int laenge) {

  this.zkLaenge = laenge;
 }

 int getZkLaenge() {

  return zkLaenge;
 }
 // Businessklassen
 // GROSSBUCHSTABEN
 void gross() {

  this.setZeichenkette(zeichenkette.toUpperCase());
 }

 void klein() {

  this.setZeichenkette(zeichenkette.toLowerCase());
 }

 void laenge() {

  this.setZkLaenge(this.zeichenkette.length());
  String laenge = new Integer(this.getZkLaenge()).toString();
  this.setZeichenkette(laenge);
 }
}

Tab. 3.8: Datei Text_Uebung2Model.java