MVC-einfache frage

Status
Nicht offen für weitere Antworten.
L

lucci

Gast
Hi,

habe ne Frage wollte mal die MVC Pattern testen, und habe dazu drei Klassen gemacht, sehr einfach, eine für
JFrame eine für den Listener und eine für die Daten...

doch beim Knopfdruck kommt kein wechsel der Hintergrund Farbe??
was habe ich da falsch gemacht...
und mit getSource()==button_blau habe ich eine fehlermeldung von eclipse bekommen ? deshalb habe ich es mit
getActionCommand probiert...scheint aber auch nicht zu gehen...

habe ich vielleicht diesen Teil falsch :

Code:
 private GUI_Labor frame;

    private GUI_Model slave = new GUI_Model();

    public GUI_Controller(GUI_Labor f) {

        this.frame = f;

    }
hier die drei Klassen : danke
Code:
import java.awt.*;
import java.awt.event.*;

import javax.swing.JFrame;

// MVC - hier die View Klasse

public class GUI_Labor extends JFrame {

    Button button_rot = new Button("Rot");

    Button button_blau = new Button("Blau");

    public GUI_Labor() {

        Container c = getContentPane();

        c.setLayout(new FlowLayout());

        c.add(button_blau);
        c.add(button_rot);

        button_rot.setActionCommand("ROT");
        button_blau.setActionCommand("BLAU");

        this.button_rot.addActionListener(new GUI_Controller(this));
        this.button_blau.addActionListener(new GUI_Controller(this));

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(200, 200);
        setVisible(true);

    }

    public static void main(String[] args)
    // Programm-Beginn
    {

        new GUI_Labor();

    }
}
.....
Code:
import java.awt.Color;

public class GUI_Model {

    //MVC --> hier Model Datenklasse

    public void doRed(GUI_Labor frame) {

        frame.setBackground(Color.ORANGE);
        frame.repaint();

    }

    public void doBlue(GUI_Labor frame) {

        frame.setBackground(Color.BLUE);
        frame.repaint();

    }
}

..

Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GUI_Controller implements ActionListener {

    private GUI_Labor frame;

    private GUI_Model slave = new GUI_Model();

    public GUI_Controller(GUI_Labor f) {

        this.frame = f;

    }

    public void actionPerformed(ActionEvent e) {

        if (e.getActionCommand().equals("ROT")) {
            slave.doRed(frame);

        }
        if (e.getActionCommand().equals("BLAU")) {
            slave.doBlue(frame);

        }

    }

}
 

Sky

Top Contributor
Da dein GUI_Labor von JFrame abgeleitet ist mußt Du 'setBackground' auf dem 'ContentPane' aufrufen:

Code:
class GUI_Model {
    public void doRed(GUI_Labor frame) {
        frame.getContentPane().setBackground(Color.ORANGE);
        frame.repaint();
    }

    public void doBlue(GUI_Labor frame) {
        frame.getContentPane().setBackground(Color.BLUE);
        frame.repaint();
    }
}
 

ugh_bough

Mitglied
Außerdem: Deine Programmierung arbeitet zwar korrekt, ist aber nicht ganz optimal. Weiß' ja nicht, inwiefern das noch interessant wird, aber im Moment hast du 2 GUI_Controller und deshalb auch 2 GUI_Models. Wenn nachher ein Model für das ganze Frame da sein soll gibts Schwierigkeiten. Versuchs mal mit dem Singleton Pattern.
Code:
class Test
{
    private static Test instance;

    public Test getInstance()
    {
        if (instance == null)
            instance = new Test();
        return instance;
    }
}

So gibt es von der Klasse Test immer nur eine Instanz, die Du mit Test.getInstance() holen kannst.
 
L

lucci

Gast
Danke..jetzt gehts ..aber wie meinst du das das ich zwei Controller habe..

wie kann ich das genau verwirklichen mit dem Singelton ? ....bitte genauen code .. :)

danke
 
U

ugh_bough_

Gast
für jeden button erstellst du doch mit dem code
Code:
...addActionListener(new GUI_Controller(this));
einen neuen GUI_Controller. Sind nach Adam Riese 2.
Jeder dieser GUI_Controller hat sein eigenes GUI_Model
Code:
private GUI_Model slave = new GUI_Model();
macht auch 2.

Du hast also für jeden Deiner 2 Knöpfe ein Controller und ein Model. Das kannst Du damit verhindern, daß du eine Möglichkeit schaffst, unkompliziert auf die einzige bestehende Instanz einer Klasse zuzugreifen. Eine Möglichkeit dafür ist das SingletonPattern. Wenn du dir den Code davon nochmal ansiehst, und annimmst, daß die Methode getInstance() den einzigen Zugriff auf eine Instanz dieser Klasse darstellt, dann kannst du dir leicht folgendes vorstellen.

1. Aufruf: instance ist noch null, sie wird aber nun mit einem gültigen Objekt verknüpft.
2. Aufruf: instance ist schon ein gültiges Objekt und wird einfach zurückgegeben.

das heißt, daß jeder Aufruf von getInstance() EIN UND DASSELBE Objekt zurückgibt. Damit sparst du nicht nur speicherplatz, sondern stellst auch sicher, daß es z.B. nur ein Model für dein Frame gibt.
 
L

lucci

Gast
..hm hab ich nun verstanden das mit 2 Model und 2 controller..aber das mit Singelton..also wie siht denn nun der genau Code bei mir aus, wenn ich ein Singelton implementiere?..was muss da alles ändern...

danke

 
B

bygones

Gast
mehr zu MVC + Singleton findest du wie becstift schon so treffend sagte in den FAQs

auch hier möchte ich nochmal darauf hinweisen, dass meiner Ansicht nach die Listener nicht als solche zu der Controller Ebene gehören müssen. Ich sehe kein Problem darin in den View die Listener zu deklarieren. Sobald sie aber Manipulation auf Model Ebene machen müssen, muss der Controller zwischen geschaltet werden !
 

dotlens

Top Contributor
ugh_bough hat gesagt.:
Code:
class Test
{
    private static Test instance;

    public Test getInstance()
    {
        if (instance == null)
            instance = new Test();
        return instance;
    }
}

wenn die getInstance() methode nicht static ist wirds schwireig die Instanz zu holen ;)
 
U

ugh_bough_

Gast
Code:
class Test
{
    private static final Test instance = new Test();

    public static synchronized Test getInstance()
    {
        return instance;
    }
}
 
B

bygones

Gast
ugh_bough_ hat gesagt.:
Code:
class Test
{
    private static final Test instance = new Test();

    public static synchronized Test getInstance()
    {
        return instance;
    }
}
mhm - das synchronizied ist unsinnig - wieso sollte man das hier brauchen ??
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
O Ganz einfache Frage - Array Java Basics - Anfänger-Themen 5
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
E einfache Frage zu private Java Basics - Anfänger-Themen 26
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
E Einfache Frage zur Parameterübergabe in Methoden Java Basics - Anfänger-Themen 8
D Wohl eine einfache Frage... Java Basics - Anfänger-Themen 2
F Vererbung (einfache Frage) Java Basics - Anfänger-Themen 5
M einfache frage zum Jdk-Compiler Java Basics - Anfänger-Themen 3
Spin einfache Frage zu Klassen Java Basics - Anfänger-Themen 12
A Einfache Frage zur Mehrfachvererbung Java Basics - Anfänger-Themen 3
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
B Einfache OCR zur Zahlenerkennung? Java Basics - Anfänger-Themen 6
M Einfache Datenfilterung Java Basics - Anfänger-Themen 15
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B Einfache HSQLDB? (lock acquisition failure) Java Basics - Anfänger-Themen 2
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
J Einfache pub/sub Lösung mit ausführlicher Doku Java Basics - Anfänger-Themen 5
R Gibt es Eine einfache Programierung dieser Methoden Java Basics - Anfänger-Themen 8
K einfache Kombinatorik Java Basics - Anfänger-Themen 4
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
L Einfache Lineare Suche Java Basics - Anfänger-Themen 7
P Erste Schritte Einfache For Schleife Java Basics - Anfänger-Themen 10
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
V Erste Schritte Einfache Rechnung mit Exponenten Java Basics - Anfänger-Themen 3
G einfache Leet-Übersetzung implementieren und benutzen Java Basics - Anfänger-Themen 14
M Einfache und Doppelte Operatoren Java Basics - Anfänger-Themen 3
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
C Extrem einfache Aufgabe falsch beantwortet :$ Java Basics - Anfänger-Themen 6
N Potenzierung durch einfache Operatoren Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2
H Sehr einfache Java-Programme Java Basics - Anfänger-Themen 24
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
-horn- Einfache graphische Darstellung von 3D Koordinaten für Flugbahnen? Java Basics - Anfänger-Themen 4
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
G Einfache if-Abfrage der Main-Argumente Java Basics - Anfänger-Themen 3
J Einfache Designfrage Java Basics - Anfänger-Themen 4
R Methoden Einfache Loops? Java Basics - Anfänger-Themen 8
R Sehr einfache möglichkeit ArrayList oder Array zu initialisieren? Java Basics - Anfänger-Themen 8
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
D einfache Quizfrage programmieren Java Basics - Anfänger-Themen 11
B Einfache Applets für Webseite Java Basics - Anfänger-Themen 10
K Einfache Rekursion - Wert wird nicht in Variable gespeichert Java Basics - Anfänger-Themen 7
U Einfache Aufgabe Java Basics - Anfänger-Themen 5
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
M Einfache Rechnung(R=U/I) Java Basics - Anfänger-Themen 12
W Einfache Passwortabfrage funktioniert nicht Java Basics - Anfänger-Themen 3
P einfache GUI-Elemente Java Basics - Anfänger-Themen 10
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
L einfache Klasse erstellen Java Basics - Anfänger-Themen 16
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
W Einfache Rekursion Java Basics - Anfänger-Themen 14
T Einfache Textausgabe .java unter OS X Java Basics - Anfänger-Themen 13
B einfache Rekursion Java Basics - Anfänger-Themen 9
A [Hilfe] einfache Aufgabe Java Basics - Anfänger-Themen 26
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
M einfache java application Java Basics - Anfänger-Themen 4
S Kann einfache Texteingabe nicht auswerten! Java Basics - Anfänger-Themen 3
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
C "einfache" If-Abfrage Java Basics - Anfänger-Themen 15
H Einfache Ausgabe eines Arrays in einen File Java Basics - Anfänger-Themen 8
F Einfache Liste hinten was einfügen Java Basics - Anfänger-Themen 3
L Einfache Umrechnung Java Basics - Anfänger-Themen 2
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
K einfache Multiplikation Java Basics - Anfänger-Themen 6
S Einfache Rechnung mit Schleife Java Basics - Anfänger-Themen 10
G einfache Swing-GUI Java Basics - Anfänger-Themen 3
F Einfache Tastatureingabe Java Basics - Anfänger-Themen 2
L [gelöst] Einfache Aufgabe, läuft aber nicht. Java Basics - Anfänger-Themen 8
S "einfache Klassengeschichten" keine Fehler, läuft Java Basics - Anfänger-Themen 2
R Einfache MVC-Uhr. MVC richtig umgesetzt? [Überarbeitet] Java Basics - Anfänger-Themen 5
G Einfache Berechnung liefert falsches Ergebnis Java Basics - Anfänger-Themen 2
J eine einfache liste Java Basics - Anfänger-Themen 17
D Suche einfache Übungsaufgaben für den JavaCreator! Java Basics - Anfänger-Themen 5
R Einfache Messagebox Java Basics - Anfänger-Themen 9
N einfache Adressdatenbank in Textdatei Java Basics - Anfänger-Themen 8
I einfache Wiedergabe Java Basics - Anfänger-Themen 2
B Warum hat dieser einfache Algorithmus lineare Laufzeit? Java Basics - Anfänger-Themen 3
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K einfache Umfang und Flächenberechnung mit interfaces Java Basics - Anfänger-Themen 3
M Einfache HTML Mail versenden , suche Beispiel Java Basics - Anfänger-Themen 5
M einfache schleife Java Basics - Anfänger-Themen 7
M Einfache Schleife Java Basics - Anfänger-Themen 4
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben