Hallo
Ich habe folgendes Problem:
Ich muss 2 Fenster erstellen. 1. Fenster ist der Dialog, in dem der Benutzer einige Einstellungen vornehmen kann. Im 2. Fenster wird dann das Labyrinth gezeichnet mit den Einstellungen. Das Ganze habe ich aufgeteilt. Für den Dialog eine Klasse View und eine für den Controller mit den ganzen Listenern. Das selbe habe ich beim Labyrinth gemacht. Für die Aufteilung müssen die Views beim Controller registriert werden. Für den Dialog funktioniert das auch. Aber im Controller vom Dialog soll er nachdem der Startbutton gerückt wurde ein neues Objekt vom Labyrinth anlegen. Ich übergebe dabei auch gleich einige Parameter an den Konstruktor im Labyrinth. Dies geht aber nicht da ich ja auch für die registrierung aus der Klasse Start etwas an den Konstruktoer übergeben muss. Ich weiß jetzt gar nicht wie ich das Problem lösen kann. Da ich irgendwie die ganzen Parameter aus dem Dialog View auch im Labyrinth brauche. Ich gebe euch noch den Code:
Ich weiß dass das viel Code ist und hoffe das ihr mein Problem versteht und mir helfen könnt.
:cry: :cry:
Ich habe folgendes Problem:
Ich muss 2 Fenster erstellen. 1. Fenster ist der Dialog, in dem der Benutzer einige Einstellungen vornehmen kann. Im 2. Fenster wird dann das Labyrinth gezeichnet mit den Einstellungen. Das Ganze habe ich aufgeteilt. Für den Dialog eine Klasse View und eine für den Controller mit den ganzen Listenern. Das selbe habe ich beim Labyrinth gemacht. Für die Aufteilung müssen die Views beim Controller registriert werden. Für den Dialog funktioniert das auch. Aber im Controller vom Dialog soll er nachdem der Startbutton gerückt wurde ein neues Objekt vom Labyrinth anlegen. Ich übergebe dabei auch gleich einige Parameter an den Konstruktor im Labyrinth. Dies geht aber nicht da ich ja auch für die registrierung aus der Klasse Start etwas an den Konstruktoer übergeben muss. Ich weiß jetzt gar nicht wie ich das Problem lösen kann. Da ich irgendwie die ganzen Parameter aus dem Dialog View auch im Labyrinth brauche. Ich gebe euch noch den Code:
Code:
public class start {
public static void main(String[] args) {
//Dialog View und Controller
DialogController control = new DialogController();
DialogView dialog = new DialogView(control);
control.registerModel(dialog);
//Labyrinth View und Controller
LabyrinthController controlLab = new LabyrinthController();
LabyrinthView laby = new LabyrinthView(controlLab);
controlLab.registerModel(laby);
}
import java.awt.*;
import java.awt.event.*;
public class DialogView
extends Frame
{
GridBagLayout layoutMgr = new GridBagLayout();
private TextField textfeld_breite, textfeld_hoehe, textfeld_wand, textfeld_sek;
private Scrollbar scrollbar_breite, scrollbar_hoehe, scrollbar_wand, scrollbar_sek;
private Label breiteL, ueberschriftL, hoeheL, wandL, sekundenL, leerL;
private Button start, abbruch;
//Min- und MaxWerte für die Eingabewerte
final int minBreiteLabyrinth = 40;
final int maxBreiteLabyrinth = 100;
int StandartwertBreite = 70;
final int minHoeheLabyrinth = 20;
final int maxHoeheLabyrinth = 50;
int StandartwertHoehe = 35;
final int minWandwahrscheinlichkeitLabyrinth = 0;
final int maxWandwahrscheinlichkeitLabyrinth = 100;
int StandartwertWandwahrscheinlichkeit = 50;
final int minAnimationLabyrinth = 0;
final int maxAnimationLabyrinth = 200;
int StandartwertAnimation = 100;
private void placeItem(Component c, int x, int y, int width, int height,
int fill, int anchor, int weightx, int weighty,
int ipadx, Insets insets
) {
// Hilfsmethode zum Platzieren einer Komponente
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = width;
constraints.gridheight = height;
constraints.fill = fill;
constraints.anchor = anchor;
constraints.weightx = weightx;
constraints.weighty = weighty;
constraints.ipadx = ipadx; //Konstanter Wert für minimale breite
constraints.insets = insets; //Rand der frei gelassen wird - Insets insets,
//constraints.ipady = ipady; //Konstanter Wert für minimale höhe
layoutMgr.setConstraints(c, constraints);
add(c);
}
//Konstruktor
public DialogView(DialogController control) {
super("Roboter im Labyrinth");//laut Hanno ist setTitle besser weil es immer besser
//aussieht die methoden der eigenen klasse zu benutzen
//anstatt auf die oberklasse zuzugreifen findet er
setLayout(layoutMgr);
setBackground(Color.lightGray); //Hintergrundfarbe wird auf Hellgrau gesetzt
setVisible(true); //Fenster wird erst jetzt angeszeigt
//Label erstellen
ueberschriftL = new Label(
"------------------------------------------------ Robotor im Labyrinth ------------------------------------------------");
breiteL = new Label("Breite des Labyrinths:");
hoeheL = new Label("Höhe des Labyrinths:");
wandL = new Label("Wandwahrscheinlichkeit:");
sekundenL = new Label("Animationsverzögerung in Millisekunden:");
leerL = new Label(" ");
//Button erstellen
start = new Button("Start");
abbruch = new Button("Abbruch");
//Schieberegler erstellen
scrollbar_breite = new Scrollbar(Scrollbar.HORIZONTAL, StandartwertBreite,
1, minBreiteLabyrinth, maxBreiteLabyrinth + 1);
scrollbar_hoehe = new Scrollbar(Scrollbar.HORIZONTAL, StandartwertHoehe, 1,
minHoeheLabyrinth, maxHoeheLabyrinth + 1);
scrollbar_wand = new Scrollbar(Scrollbar.HORIZONTAL,
StandartwertWandwahrscheinlichkeit, 1,
minWandwahrscheinlichkeitLabyrinth,
maxWandwahrscheinlichkeitLabyrinth + 1);
scrollbar_sek = new Scrollbar(Scrollbar.HORIZONTAL, StandartwertAnimation, 1,
minAnimationLabyrinth, maxAnimationLabyrinth + 1);
//Textfelder erstellen
textfeld_breite = new TextField(10);
textfeld_breite.setText(""+scrollbar_breite.getValue());
textfeld_hoehe = new TextField(10);
textfeld_hoehe.setText(""+scrollbar_hoehe.getValue());
textfeld_wand = new TextField(10);
textfeld_wand.setText(""+scrollbar_wand.getValue());
textfeld_sek = new TextField(10);
textfeld_sek.setText(""+scrollbar_sek.getValue());
//Plazieren aller Elemente
//----------------Festlegung der Zeile für die Überschrift---------
placeItem(ueberschriftL, 0, 0, 4, 1, GridBagConstraints.HORIZONTAL,
GridBagConstraints.WEST, 0, 0, 0, new Insets(0, 5, 0, 0)
);
//---------------------Festlegung der Zeile zur BreiteLabyrinth----------------
placeItem(breiteL, 1, 1, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.WEST, 0, 0, 0, new Insets(5, 5, 5, 5));
placeItem(scrollbar_breite, 2, 1, 1, 1, GridBagConstraints.HORIZONTAL,
GridBagConstraints.WEST, 1, 0, 100, new Insets(5, 5, 5, 5));
placeItem(textfeld_breite, 3, 1, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.EAST, 1, 1, 0, new Insets(5, 5, 5, 5));
//---------------Festlegung der Zeile zur HöheLabyrinth-----------------------------
placeItem(hoeheL, 1, 2, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.WEST, 0, 0, 0, new Insets(5, 5, 5, 5));
placeItem(scrollbar_hoehe, 2, 2, 1, 1, GridBagConstraints.HORIZONTAL,
GridBagConstraints.WEST, 1, 0, 100, new Insets(5, 5, 5, 5));
placeItem(textfeld_hoehe, 3, 2, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.EAST, 1, 1, 0, new Insets(5, 5, 5, 5));
//-------------Festlegung der Zeile zur Wandwahrscheinlichkeit-------------------
placeItem(wandL, 1, 3, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.WEST, 0, 0, 0, new Insets(5, 5, 5, 5));
placeItem(scrollbar_wand, 2, 3, 1, 1, GridBagConstraints.HORIZONTAL,
GridBagConstraints.WEST, 1, 0, 100, new Insets(5, 5, 5, 5));
placeItem(textfeld_wand, 3, 3, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.EAST, 1, 1, 0, new Insets(5, 5, 5, 5));
//------------Festlegung der Zeile zur Animationsverzögerung---------------------
placeItem(sekundenL, 1, 4, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.WEST, 0, 0, 0, new Insets(5, 5, 15, 5));
placeItem(scrollbar_sek, 2, 4, 1, 1, GridBagConstraints.HORIZONTAL,
GridBagConstraints.WEST, 1, 0, 100, new Insets(5, 5, 15, 5));
placeItem(textfeld_sek, 3, 4, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.EAST, 1, 1, 0, new Insets(5, 5, 15, 5));
//--------------Festlegung der Buttons---------------------------------------------
placeItem(start, 0, 5, 2, 1, GridBagConstraints.NONE,
GridBagConstraints.SOUTHWEST, 0, 0, 50, new Insets(0, 5, 5, 0));
placeItem(abbruch, 3, 5, 2, 1, GridBagConstraints.NONE,
GridBagConstraints.SOUTHEAST, 0, 0, 40, new Insets(0, 0, 5, 5));
//Übergabe des Wertes vom Scrollbalken zum Textfeld
scrollbar_breite.addAdjustmentListener(control);
scrollbar_hoehe.addAdjustmentListener(control);
scrollbar_wand.addAdjustmentListener(control);
scrollbar_sek.addAdjustmentListener(control);
//Übergabe des Wertes vom Textfeld zum Scrollbalken
textfeld_breite.addTextListener(control);
textfeld_hoehe.addTextListener(control);
textfeld_wand.addTextListener(control);
textfeld_sek.addTextListener(control);
//Nur Eingabe von Zahlen möglich
textfeld_breite.addKeyListener(control);
textfeld_hoehe.addKeyListener(control);
textfeld_wand.addKeyListener(control);
textfeld_sek.addKeyListener(control);
//Textfelder immer eingegeben werden müssen
textfeld_breite.addFocusListener(control);
textfeld_hoehe.addFocusListener(control);
textfeld_wand.addFocusListener(control);
textfeld_sek.addFocusListener(control);
//GridBagLayout
addWindowListener(control); //Schließt Fenster über das Kreuz
//Zufügen der Button Start und Beenden zum ActionListener
start.addActionListener(control);
abbruch.addActionListener(control);
pack(); // der Container ist nur so groß wie nötig
} //Ende Konstruktor
public Scrollbar getScrollbar_breite () {
return scrollbar_breite;
}
public Scrollbar getScrollbar_hoehe () {
return scrollbar_hoehe;
}
public Scrollbar getScrollbar_wand () {
return scrollbar_wand;
}
public Scrollbar getScrollbar_sek () {
return scrollbar_sek;
}
TextField getTextfeld_breite () {
return textfeld_breite;
}
TextField getTextfeld_hoehe () {
return textfeld_hoehe;
}
TextField getTextfeld_sek () {
return textfeld_sek;
}
TextField getTextfeld_wand () {
return textfeld_wand;
}
Button getStart () {
return start;
}
}
import java.awt.*;
import java.awt.event.*;
public class DialogController
extends WindowAdapter
implements ActionListener, AdjustmentListener, FocusListener, KeyListener, TextListener {
private DialogView gui; //View und Modell
//Fenstergröße für das Fenster Labyrinth
static final int festerBreiteLabyrinth = 1020; //static = existiert nur in dieser Klasse, nicht an ein Objekt gebunden
static final int fensterHoeheLayrinth = 530; //final = Variable darf nicht verändert werden
//Min- und MaxWerte für die Eingabewerte
final int minBreiteLabyrinth = 40;
final int maxBreiteLabyrinth = 100;
int standartwertBreite = 70;
final int minHoeheLabyrinth = 20;
final int maxHoeheLabyrinth = 50;
int standartwertHoehe = 35;
final int minWandwahrscheinlichkeitLabyrinth = 0;
final int maxWandwahrscheinlichkeitLabyrinth = 100;
int standartwertWandwahrscheinlichkeit = 50;
final int minAnimationLabyrinth = 0;
final int maxAnimationLabyrinth = 200;
int standartwertAnimation = 100;
//WindowListener
public void windowClosed(WindowEvent e) {
System.exit(0);
}
public void windowClosing(WindowEvent e) {
e.getWindow().dispose();
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("Start")) {
LabyrinthController windows = new LabyrinthController();
LabyrinthView labyrinth = new LabyrinthView(gui.getScrollbar_breite().getValue(),
gui.getScrollbar_hoehe().getValue(),
gui.getScrollbar_wand().getValue(),
gui.getScrollbar_sek().getValue(),windows);
//LabyrinthView labyrinth = new LabyrinthView(windows);
labyrinth.setSize(festerBreiteLabyrinth, fensterHoeheLayrinth); //Vorgegebene Größe
labyrinth.setVisible(true);
gui.setVisible(false);
}
else if (cmd.equals("Abbruch")) {
System.exit(0);
}
}
//AdjustmentListener
public void adjustmentValueChanged(AdjustmentEvent e) {
Adjustable cmd = e.getAdjustable();
if (cmd.equals(gui.getScrollbar_breite())) {
gui.getTextfeld_breite().setText("" + gui.getScrollbar_breite().getValue());
}
if (cmd.equals(gui.getScrollbar_hoehe())) {
gui.getTextfeld_hoehe().setText("" + gui.getScrollbar_hoehe().getValue());
}
if (cmd.equals(gui.getScrollbar_wand())) {
gui.getTextfeld_wand().setText("" + gui.getScrollbar_wand().getValue());
}
if (cmd.equals(gui.getScrollbar_sek())) {
gui.getTextfeld_sek().setText("" + gui.getScrollbar_sek().getValue());
}
}
public void keyPressed(KeyEvent e) {
char key = e.getKeyChar();
if (! ( (Character.isDigit(key))||
e.getKeyChar() == e.VK_BACK_SPACE ||
e.getKeyChar() == e.VK_DELETE || e.getKeyCode() == e.VK_RIGHT ||
e.getKeyCode() == e.VK_LEFT)) {
e.consume();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
//TextListener
/**
* textValueChanged
*
* @param e TextEvent
*/
public void textValueChanged(TextEvent e) {
try {
if (e.getSource().equals(gui.getTextfeld_breite())) {
gui.getScrollbar_breite().setValue(Integer.parseInt(gui.getTextfeld_breite().getText()));
}
else if (e.getSource().equals(gui.getTextfeld_hoehe())) {
gui.getScrollbar_hoehe().setValue(Integer.parseInt(gui.getTextfeld_hoehe().getText()));
}
else if (e.getSource().equals(gui.getTextfeld_wand())) {
gui.getScrollbar_wand().setValue(Integer.parseInt(gui.getTextfeld_wand().getText()));
}
else if (e.getSource().equals(gui.getTextfeld_sek())) {
gui.getScrollbar_sek().setValue(Integer.parseInt(gui.getTextfeld_sek().getText()));
}
}
catch (NumberFormatException ef) {
if (e.getSource().equals(gui.getTextfeld_breite())) {
gui.getScrollbar_breite().setValue(0);
}
else if (e.getSource().equals(gui.getTextfeld_hoehe())) {
gui.getScrollbar_hoehe().setValue(0);
}
else if (e.getSource().equals(gui.getTextfeld_wand())) {
gui.getScrollbar_wand().setValue(0);
}
else if (e.getSource().equals(gui.getTextfeld_sek())) {
gui.getScrollbar_sek().setValue(0);
}
}
}
public void focusLost(FocusEvent e) {
//Für Textfeld Breite
if (e.getSource().equals(gui.getTextfeld_breite())) {
if (gui.getTextfeld_breite().getText().equals("")) {
gui.getTextfeld_breite().requestFocus();
}
else if ( (Integer.parseInt(gui.getTextfeld_breite().getText())) <
minBreiteLabyrinth) {
gui.getTextfeld_breite().setText("" + minBreiteLabyrinth);
}
else if ( (Integer.parseInt(gui.getTextfeld_breite().getText())) >
maxBreiteLabyrinth) {
gui.getTextfeld_breite().setText("" + maxBreiteLabyrinth);
}
}
//Für Textfeld Hoehe
else if (e.getSource().equals(gui.getTextfeld_hoehe())) {
if (gui.getTextfeld_hoehe().getText().equals("")) {
gui.getTextfeld_hoehe().requestFocus();
}
else if ( (Integer.parseInt(gui.getTextfeld_hoehe().getText())) <
minHoeheLabyrinth) {
gui.getTextfeld_hoehe().setText("" + minHoeheLabyrinth);
}
else if ( (Integer.parseInt(gui.getTextfeld_hoehe().getText())) >
maxHoeheLabyrinth) {
gui.getTextfeld_hoehe().setText("" + maxHoeheLabyrinth);
}
}
//Für Textfeld Wandwahrscheinlichkeit
else if (e.getSource().equals(gui.getTextfeld_wand())) {
if (gui.getTextfeld_wand().getText().equals("")) {
gui.getTextfeld_wand().requestFocus();
}
else if ( (Integer.parseInt(gui.getTextfeld_wand().getText())) <
minWandwahrscheinlichkeitLabyrinth) {
gui.getTextfeld_wand().setText("" + minWandwahrscheinlichkeitLabyrinth);
}
else if ( (Integer.parseInt(gui.getTextfeld_wand().getText())) >
maxWandwahrscheinlichkeitLabyrinth) {
gui.getTextfeld_wand().setText("" + maxWandwahrscheinlichkeitLabyrinth);
}
}
//Für Textfeld Animation
else if (e.getSource().equals(gui.getTextfeld_sek())) {
if (gui.getTextfeld_sek().getText().equals("")) {
gui.getTextfeld_sek().requestFocus();
}
else if ( (Integer.parseInt(gui.getTextfeld_sek().getText())) <
minAnimationLabyrinth) {
gui.getTextfeld_sek().setText("" + minAnimationLabyrinth);
}
else if ( (Integer.parseInt(gui.getTextfeld_sek().getText())) >
maxAnimationLabyrinth) {
gui.getTextfeld_sek().setText("" + maxAnimationLabyrinth);
}
}
}
public void focusGained (FocusEvent e) {
}
public void registerModel(DialogView gui) {
this.gui = gui;
}
}
import java.awt.*;
import java.awt.event.*;
public class LabyrinthView
extends Frame {
int breite;
int hoehe;
int wandwahrscheinlichkeit;
int animation;
final int labyrinthFensterbreite = 900;
final int labyrinthFensterhoehe = 450;
private CanvasLabyrinth labyrinthFeld;
public PopupMenu popup;
int zelle;
GridBagLayout layoutMgr = new GridBagLayout();
private DialogView gui;
//Definitin der Button
Button start;
Button abbruch;
//Hilfsmethode zum Platzieren einer Komponente
private void placeItem(Component c, int x, int y, int width, int height,
int fill, int anchor, int ipadx, Insets insets) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = width;
constraints.gridheight = height;
constraints.fill = fill;
constraints.anchor = anchor;
constraints.ipadx = ipadx; //Konstanter Wert für minimale höhe
constraints.insets = insets; //Rand der frei gelassen wird - Insets insets,
layoutMgr.setConstraints(c, constraints);
add(c);
}
//Konstruktor
public LabyrinthView(int breite, int hoehe, int wandwahrscheinlichkeit,
int animation, LabyrinthController window) {
//public LabyrinthView(LabyrinthController window) {
//Name des Fensters
setTitle("Das Labyrinth");
//Parameter des Fensters
this.breite = breite;
this.hoehe = hoehe;
this.wandwahrscheinlichkeit = wandwahrscheinlichkeit;
this.animation = animation;
setLayout(layoutMgr);
start = new Button("Start");
abbruch = new Button("Abbruch");
//Ermittlung der Zellengröße
if ( (labyrinthFensterbreite / breite) <= (labyrinthFensterhoehe / hoehe)) {
zelle = (labyrinthFensterbreite / breite);
}
else {
zelle = (labyrinthFensterhoehe / hoehe);
}
//Objekt vom Typ Canvas (Mycanvas abgeleitet) für das Labyrinth erstellen
labyrinthFeld = new CanvasLabyrinth(breite,hoehe,wandwahrscheinlichkeit,zelle);
labyrinthFeld.setSize(labyrinthFensterbreite + 1, labyrinthFensterhoehe + 1);
labyrinthFeld.setBackground(Color.yellow);
// ----------------Festlegung der Zeile für die Überschrift---------
placeItem(labyrinthFeld, 0, 0, 1, 10, GridBagConstraints.NONE,
GridBagConstraints.WEST, 0, new Insets(0, 0, 0, 0)
);
placeItem(start, 1, 0, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.EAST, 30, new Insets(5, 10, 0, 0)
);
placeItem(abbruch, 1, 2, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.EAST, 12, new Insets(5, 10, 0, 0)
);
//PopupMenu
popup = new PopupMenu();
popup.add("Linksroboter");
popup.add("Rechtssroboter");
popup.add("Zufallsroboter");
add(popup);
//EreignisBehandlung der Button
start.addActionListener(window);
abbruch.addActionListener(window);
popup.addActionListener(window);
//Keine Größenänderung des Fensters
setResizable(false);
addWindowListener(window); //Schließen Fenster mit x
pack();
}
}
Ich weiß dass das viel Code ist und hoffe das ihr mein Problem versteht und mir helfen könnt.
:cry: :cry: