MVC-Hilfe

Status
Nicht offen für weitere Antworten.

StarSeven

Bekanntes Mitglied
Hallo, kann mir jemand ein ganz einfaches Beispiel für den Modell-View-Controller geben?
Z.B. das wenn man in ein Text Feld etwas eingibt es auch auf ein Label daneben erscheint.
Das kann man doch damit machen oder?
Danke für die Hilfe in vorraus.
 
StarSeven hat gesagt.:
Hallo, kann mir jemand ein ganz einfaches Beispiel für den Modell-View-Controller geben?
Z.B. das wenn man in ein Text Feld etwas eingibt es auch auf ein Label daneben erscheint.
Das kann man doch damit machen oder?
Danke für die Hilfe in vorraus.

Ich weiss jetzt zwar gerade nichts mit dem MVC Begriff und dessen Langfassung was anzufangen, aber zu deinem Beispiel kann ich was sagen.

Ich weiss jetzt nicht, ob du Swing oder AWT Benutzt, aber bei Swing JTextField brauchst du das Textfeld nur beim CaretListener registrieren, und halt ganz stumpf in der Methode caretUpdate schreiben:
jlabel.setText(jtextfield.getText());

Dann wird quasi beim schreiben in dem TextFeld automatisch der Text in dem Label übernommen.

Falls ich deine Frage jetzt falsch verstanden habe, einfach nochmal fragen.
 
hallo, ich antworte zwar n bisl spät konnte aber ne zeitlang nicht online.
Also nun meine Frage, ich habe mir mal den caret listener im Javabuch angeguckt, habe aber irgendwie nicht so richtig verstanden wies funktioniert, kannst du mir mal ein kleines beispiel mit erläuterung schreiben *ganzliebanguck*
 
mal ganz abgespeckt, das habe ich jetzt aus dem Kopf heraus geschrieben, für Fehler möge man mir entschuldigen 🙂.
Theoretisch sollte das, wenn man eine main Methode hinzu fügt, so compilierbar sein:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class MyExample extends JFrame
implements CaretListener                       // Implementiert den CaretListener
{
    JPanel pExample = (JPanel)this.getContentPane();
    JTextField tfExample = new JTextField();
    JLabel lExample = new JLabel("");

    MyExample()
    {
        tfExample.setColumns(30);
        tfExample.addCaretListener(this);   // Fügt JTextField den CaretListener hinzu

        pExample.setLayout(new BorderLayout());
        pExample.add(tfExample, BorderLayout.NORTH);
        pExample.add(lExample, BorderLayout.SOUTH);
    }

    public void caretUpdate(CaretEvent e)  // Aufgerufen beim verändern des TextFeldes
    {
        lExample.setText(tfExample.getText());
    }
}
 
Also ich habe jetzt mal probiert auch einfach ein Programm mit den CaretListener zu erstellen, sties dabei jedoch auf ein Problem, dieses dürfte zwar mehr mit OOP zu tun haben aber ich schreibs mal hier rein weil ich mir auch nicht sicher bin:
Mein Code:
Code:
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;

public class caret {
	JLabel label = new JLabel();
	JTextField textfeld = new JTextField();

	public static void main(String args[]) {
		caret caretlistener = new caret();
		caretlistener.example();

	}

	public void example() {
		JFrame frame = new JFrame("Ich bin ein Frame ^^");
		JPanel panel = new JPanel();

		frame.setLocation(100, 100);
		frame.setSize(200, 80);
		frame.getContentPane().add(panel);
		panel.setLayout(new GridLayout(1, 2));
		panel.add(textfeld);
		panel.add(label);

		textfeld.addCaretListener(); //Hier liegt das Problem
		frame.setVisible(true);

	}

	public void caretUpdate(CaretEvent e) {
		label.setText(textfeld.getText());

	}

}
Wo hier liegt das Problem steht wird mir ein Fehler angezeigt, du hast dort den Konstruktor (ist doch einer oder?) this übergeben, aber ich müsste das doch eigentlich nicht bei diesem Beispiel machen oder?
Kannst du mir sagen warum er mir dort ein Fehler anzeigt?
 
StarSeven hat gesagt.:
Code:
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
//import javax.swing.event.CaretEvent;
//Schreibe lieber:
import javax.swing.event.*;
//Der Compiler zieht sich eh nur das raus, was er braucht.

public class caret
//Siehe Zeile 7 in meinem Code: Du hast folgendes vergessen:
implements CaretListener
{
	JLabel label = new JLabel();
	JTextField textfeld = new JTextField();

	public static void main(String args[]) {
		caret caretlistener = new caret();
		caretlistener.example();

	}

	public void example() {
		JFrame frame = new JFrame("Ich bin ein Frame ^^");
		JPanel panel = new JPanel();

		frame.setLocation(100, 100);
		frame.setSize(200, 80);
		frame.getContentPane().add(panel);
		panel.setLayout(new GridLayout(1, 2));
		panel.add(textfeld);
		panel.add(label);

                  // this fehlte
		textfeld.addCaretListener(this); //Hier liegt das Problem
		frame.setVisible(true);

	}

	public void caretUpdate(CaretEvent e) {
		label.setText(textfeld.getText());

	}

}
Wo hier liegt das Problem steht wird mir ein Fehler angezeigt, du hast dort den Konstruktor (ist doch einer oder?) this übergeben, aber ich müsste das doch eigentlich nicht bei diesem Beispiel machen oder?
Kannst du mir sagen warum er mir dort ein Fehler anzeigt?

Du hast mehrere Fehler gemacht. Siehe meine obigen Änderungen, der Code in dem Zitat sollte compilierbar sein. Aber die einzelnen punkte erkläre ich nochmal:

Du solltest das komplette javax.swing.event package importieren, in dem du das so machst:
import javax.swing.event.*;
Der Compiler holt sich eh nur die Sachen, die er braucht.

Weiterhin hast du die implements Zeile mit dem CaretListener vergessen, also so:
public class caret
implements CaretListener
{

Und bei
textfeld.addCaretListener(this);
ist this sehr wichtig. Denn er muss ja wissen, welchen CaretListener er hinzufügen soll.
 
Danke das du mir nochmals geholfen hast, habs jetzt mit diesem Code hinbekommen:
Code:
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class caret implements CaretListener{
	JLabel label = new JLabel();
	JTextField textfeld = new JTextField();

	public static void main(String args[]) {
		caret caretlistener = new caret();
		caretlistener.example();

	}

	public void example() {
		JFrame frame = new JFrame("Ich bin ein Frame ^^");
		JPanel panel = new JPanel();

		frame.setLocation(100, 100);
		frame.setSize(200, 80);
		frame.getContentPane().add(panel);
		panel.setLayout(new GridLayout(1, 2));
		panel.add(textfeld);
		panel.add(label);

		textfeld.addCaretListener(this);
		frame.setVisible(true);

	}

	public void caretUpdate(CaretEvent e) {
		label.setText(textfeld.getText());

	}

}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben