Methoden Schwierikeiten mit Protokollfenster (Frame Objekt)

Iago

Mitglied
Hallo,

ich sitze an einem (Applet-)Spiel bei dem es um das Umdrehen von MosaikKarten geht.
Es gibt ein Raster, wenn man auf eins der Rasterelemente klickt
werden die Nachbarfelder umgedreht. Das funktioniert alles recht gut.
Jetzt möchte ich einen Kontrollkasten (Frame-Objekt) hinzufügen, der zunächst nochmals
die gleichen Elemente enthält. Hier soll dann in einem zweiten Schritt einfach die
angeklickten Elemente selbst angezeigt werden.

Jetzt habe ich das Problem, dass Mosaikteile nicht als Quadrate sondern
als Rechtecke dargestellt werden. Auch wenden die Mosaikteile nicht vollständig geladen.
Im Grunde genommen ist das Frame-Fenster nur eine Modifikation des großen Appletfensters,
nicht anderes.

Wo könnte hier der Fehler sein? Für eine Hilfestellung wäre ich dankbar.

Merci!


Hier ist die Klasse, die die Mosaikteile erstellt:

Java:
MosaikCanvas:
import java.awt.*;

public class MosaikCanvas extends Canvas implements MosaikIF {
  
  private Color farbe, farbeRueckseite, farbeVorderseite;
  private boolean vorderseite = false;
  private int zeile,spalte;
  private Point point;
  
  public Color getFarbe() {
      return farbe; 
  }
  public void setFarbe(Color inValue) {
      farbe = inValue;
  }
  
  public boolean isVorderseite() {
      return vorderseite;
    } 
  
  public int getZeile() { return zeile;}
  public int getSpalte() { return spalte;}
  
  public MosaikCanvas(int zeile, int spalte, Color farbeRueckseite, Color farbeVorderseite) {
  
  this.zeile = zeile;
  this.spalte = spalte;
  this.farbeRueckseite = farbeRueckseite;
  this.farbeVorderseite = farbeVorderseite;
  this.setFarbe(farbeRueckseite);

  point = new Point(zeile,spalte);
  }
  
  public void switchSeite() {
  vorderseite =! vorderseite;
  
  if(farbe == farbeRueckseite) {  farbe = farbeVorderseite; }
    else { farbe = farbeRueckseite; }
  
     repaint();
  }
  
  public void paint (Graphics g) {
   g.setColor(getFarbe());
   g.fillRect(0,0,getSize().width,getSize().height);
  
  }

}


Hier ist die Panel-Objekt Klasse: FarbMosaik, welches die Mosaikteile erzeugt:

Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Panel;

public class FarbMosaik extends Panel{
  
  private ModelIF model;
  private MosaikEventHandler eventHandler;
  
  public MosaikEventHandler getEventHandler() {
    return eventHandler;
  }
  
  public FarbMosaik(int raster, int breite, Color farbeRueckseite, Color farbeVorderseite) {
    
    model = new MosaikModel(raster,raster);
    eventHandler = new MosaikEventHandler(model);
    this.setLayout(new GridLayout(raster,raster,1,1));
    int canvasBreite = breite/raster;
    
    for(int i=0; i<raster; i++) {
      for(int j=0; j<raster; j++) {
        
        MosaikCanvas mc = new MosaikCanvas(i,j,farbeRueckseite,farbeVorderseite);
        mc.addMouseListener(eventHandler);
        mc.setSize(canvasBreite,canvasBreite);
        model.putObj(i,j,mc);
        this.add(mc);
        
      } 
    }
    
  }
}


An Anlehnung an FarbMosaik habe ich nun die Klasse ProtokollFenster.java geschrieben. Analog
zum Canvas-Objekt :

Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Frame;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;


public class ProtokollFenster extends Frame {

   int size = 300;

   public ProtokollFenster() 
  {
    setTitle("Kontrollfenster");  // Fenstertitel setzen
    setSize(size,size);                            // Fenstergröße einstellen  
    
    setVisible(true);                            // Fenster (inkl. Inhalt) sichtbar machen
  }
  
  public void createMosaik(int raster, Color farbeRueckseite, Color farbeVorderseite) 
  
  {
    setLayout(new GridLayout(raster,raster,1,1));
    int canvasBreite = size/raster;
    
    for(int i=0; i<raster; i++) {
      for(int j=0; j<raster; j++) {
        
        MosaikCanvas mc = new MosaikCanvas(i,j,farbeRueckseite,farbeVorderseite);
        mc.setSize(canvasBreite,canvasBreite);
        this.add(mc);
        
      } 
    }
  }
  }
 

knilch

Bekanntes Mitglied
Hi,
du hast einen Konstruktor
Java:
 public FarbMosaik(int raster, int breite, Color farbeRueckseite, Color farbeVorderseite) {...}
Beim Erstellen der FarbMosaik- Instanz gibst du eine breite mit.

Ist die breite die du hier mitgibst gleich gross wie der Wert von size, welcher du in der Klasse ProtokollFenster verwendest?
Java:
int size = 300;
 
Zuletzt bearbeitet:

Iago

Mitglied
Hallo,
danke Knilch,
ja, ich habe die Größe im Applet und in Protokollfenster.java jetzt verändert und habe unterschiedliche Ergebnisse!! Wie hängt das mit neinander zusammen? Ich lege ja in Protokollfenster die Größe neu fest,

Bei Mosaik-Canvas Konstruktor übergebe ich ja keine Größe, aber nachher beim zeichnen wird die
Größe mit g.fillRect(0,0,getSize().width,getSize().height); nochmals geholt.
Dann holt getSize die Größe von Applet, richtig!?
(und muss irgendwie modifiziert werden)
 

Iago

Mitglied
Hallo,
ja, die Schwierigkeit ist eben, dass ich für das Protokollfenster kleinere Quadrate haben möchte.

Ich habe das nun so überarbeitet, dass ich den Mosaikteilen die gewünschte Breite im Konstruktor übergebe, damit ich diese Breite dann beim zeichnen an fillRect(int x, int y, int width, int height) übergeben kann. (nur ein Wert, da es ja Quadrate sind)
Manchmal weden die kleineren Quadrate im Protokollfenster auch angezeigt, desöfteren jedoch nur
teilweise.

Hier nun der Code. Wer sich das anschauen mag, vielne lieben Dank im voraus:

Im Applet Mosaik.java übergebe ich die unterschiedlichen Werte (height,width) an FarbMosaik und ProtokollFenster:

Java:
import java.awt.Color;

public class Mosaik extends java.applet.Applet {
  
  private Color farbeRueckseite = new Color(230,30,50);
  private Color farbeVorderseite = new Color(50,210,30);
  private int raster;
  FarbMosaik fm;
  ProtokollFenster pf;
  StatistikModel statistik;  
  
  public void init() {
    String temp = getParameter("raster");
    raster = Integer.parseInt(temp);
         
    fm = new FarbMosaik(raster, getWidth(), getHeight(), farbeRueckseite, farbeVorderseite);
    pf = new ProtokollFenster(raster,300,300,farbeRueckseite,farbeVorderseite);
    
    }
  
  }

Hier ist Farbmosaik. Ich übergebe canvasBreite (Teiler von breite/raster) dann an MosaikCanvas.

Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Panel;

public class FarbMosaik extends Panel{
  
  private ModelIF model;
  private MosaikEventHandler eventHandler;
  
  public MosaikEventHandler getEventHandler() {
    return eventHandler;
  }
  
  public FarbMosaik(int raster, int breite, int hoehe, Color farbeRueckseite, Color farbeVorderseite) {
    
    model = new MosaikModel(raster,raster);
    eventHandler = new MosaikEventHandler(model);
    this.setLayout(new GridLayout(raster,raster,1,1));
    int canvasBreite = breite/raster;
    
    for(int i=0; i<raster; i++) {
      for(int j=0; j<raster; j++) {
        
        MosaikCanvas mc = new MosaikCanvas(i,j,canvasBreite,farbeRueckseite,farbeVorderseite);
        mc.addMouseListener(eventHandler);
        mc.setSize(canvasBreite,canvasBreite);
        model.putObj(i,j,mc);
        this.add(mc);
        
      } } }}

Die Werte von canvasBreite = breite/raster verwende ich nun auch in Protokollfenster. Zunächst lege ich ich die Rahmenbreite mit breite fest:


Java:
public class ProtokollFenster extends Frame {
  
  
  public ProtokollFenster(int raster, int hoehe, int breite, Color farbeRueckseite, Color farbeVorderseite) 
  {
    setTitle("Kontrollfenster");  // Fenstertitel setzen
    setSize(breite,breite);                            // Fenstergröße einstellen  
    
    setVisible(true);                            // Fenster (inkl. Inhalt) sichtbar machen
  
    setLayout(new GridLayout(raster,raster,1,1));
    int canvasBreite = breite/raster;
    
    for(int i=0; i<raster; i++) {
      for(int j=0; j<raster; j++) {
        
        MosaikCanvas mc = new MosaikCanvas(i,j,canvasBreite,farbeRueckseite,farbeVorderseite);
        mc.setSize(canvasBreite,canvasBreite);
        this.add(mc);
        
      } } }}

Mein Ziel war es ja nun in MosaikCanvas die Quadrate nun mit der CanvasBreite (hier: breite) zu zeichnen. Dies gelingt nur teilweise:

Java:
private int zeile,spalte,breite;
  
  public Color getFarbe() {
      return farbe; 
  }
  public void setFarbe(Color inValue) {
      farbe = inValue;
  }
  
  public boolean isVorderseite() {
      return vorderseite;
    } 
  
  public int getZeile() { return zeile;}
  public int getSpalte() { return spalte;}
  
  public MosaikCanvas(int zeile, int spalte, int breite, Color farbeRueckseite, Color farbeVorderseite) {
    
  this.zeile = zeile;
  this.spalte = spalte;
    this.farbeRueckseite = farbeRueckseite;
  this.farbeVorderseite = farbeVorderseite;
    this.setFarbe(farbeRueckseite);
    this.breite = breite;
    
  }
  
  public void switchSeite() {
    vorderseite =! vorderseite;
  
  if(farbe == farbeRueckseite) {  farbe = farbeVorderseite; }
    else { farbe = farbeRueckseite; }
  
     repaint();
  }
  
  public void paint (Graphics g) {
    g.setColor(getFarbe());
    g.fillRect(0,0,breite,breite);
    
  }

}

Vielen Dank!
 
Zuletzt bearbeitet:

Iago

Mitglied
Hallo,
ha ich habs! Frame oder JFrame sind ja nur die "nackten" Fenster. Ich muss mein Raster zunächst in
ein Panel-Objekt und das dann in das Frame-Objekt einbinden! Dann funktioniert's einwandfrei!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Alex_99 Aktion ausführen wenn Frame disposed wurde Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
S GUI Frame wechseln Java Basics - Anfänger-Themen 15
C Exportierte JAR öffnet zweiten Frame nicht mehr Java Basics - Anfänger-Themen 7
C Erkennen ob Frame geschlossen wurde Java Basics - Anfänger-Themen 2
C Erste Schritte Spieler an anderen Frame weitergeben Java Basics - Anfänger-Themen 23
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
R Erste Schritte Frame mit Ladebalken und BestätigungsButton Java Basics - Anfänger-Themen 10
das_leon Interface Frame in einem Frame (Window Builder) Java Basics - Anfänger-Themen 2
Anfänger2011 Frame zeigt nicht gewünschtes Ergebnis an ... Java Basics - Anfänger-Themen 5
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
W Frame in anderer Klasse anzeigen lassen Java Basics - Anfänger-Themen 1
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
L bestimmten Frame anzeigen lassen? Java Basics - Anfänger-Themen 6
H Textfeldinhalt löschen nachdem Frame geschlossen wird Java Basics - Anfänger-Themen 8
L Kalender Java Frame Java Basics - Anfänger-Themen 7
A Frame Java Basics - Anfänger-Themen 3
P Verwirrung mit AWT Frame und main Methode Java Basics - Anfänger-Themen 19
A Frame java Java Basics - Anfänger-Themen 3
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
J Erste Schritte Speichern / Speichern unter / title Frame Java Basics - Anfänger-Themen 5
F Frame in Frame Java Basics - Anfänger-Themen 3
U GUI - resize frame Java Basics - Anfänger-Themen 13
J Open reading Frame Java Basics - Anfänger-Themen 4
J Erstelltes Frame wird nicht angezeigt Java Basics - Anfänger-Themen 2
K Frame öffnen klappt nicht?! Java Basics - Anfänger-Themen 36
JAVAnnik Anwendung nach Schließen vom letzen Frame Java Basics - Anfänger-Themen 9
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
A Frame Background Java Basics - Anfänger-Themen 21
S Klassen Klassenname = Frame? Java Basics - Anfänger-Themen 11
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
I Java - Text in neuem Frame wird nicht angezeigt Java Basics - Anfänger-Themen 4
M Frame mit mehreren areas Java Basics - Anfänger-Themen 14
B Frame über Button öffnen Java Basics - Anfänger-Themen 8
R Button soll neuen Frame öffnen Java Basics - Anfänger-Themen 21
L Variablen Frame Variablen-Schleife Java Basics - Anfänger-Themen 3
D Neues Frame öffnen Java Basics - Anfänger-Themen 7
V Frame bleibt grau Java Basics - Anfänger-Themen 5
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
F frame wird nicht angezeigt? Java Basics - Anfänger-Themen 10
S 2 Panels in einen Frame Java Basics - Anfänger-Themen 5
H Panels in Frame einbinden Java Basics - Anfänger-Themen 3
E Frame neu Zeichnen Java Basics - Anfänger-Themen 3
A Bild wird auf Frame nicht angezeigt! Keine Fehlermeldung Java Basics - Anfänger-Themen 3
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
T Frame öffnen Java Basics - Anfänger-Themen 6
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
I JTable in bestehenden Frame integrieren Java Basics - Anfänger-Themen 6
Y Hilfe: JOGL / OPENGL in Frame Java Basics - Anfänger-Themen 2
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
Luk10 Frame schließen Java Basics - Anfänger-Themen 2
A Frame schließen!? Help! Java Basics - Anfänger-Themen 5
A Frame reagiert nicht Java Basics - Anfänger-Themen 6
H Modalen JDialog schließen, ohne dabei das Parent-Frame zu schließen Java Basics - Anfänger-Themen 7
J Frame bleibt schwarz beim Laden Java Basics - Anfänger-Themen 11
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
R Frame Inhalt ausrichten Java Basics - Anfänger-Themen 5
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Stillmatic1985 Label in einem Frame zentrieren Java Basics - Anfänger-Themen 4
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
A Java Frame per X schließen? Java Basics - Anfänger-Themen 7
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
kulturfenster Per Button Frame schliessen Java Basics - Anfänger-Themen 2
C Frame, JFrame, JDialog Java Basics - Anfänger-Themen 12
I JButton zum frame schließen Java Basics - Anfänger-Themen 6
M Variable in Frame anzeigen Java Basics - Anfänger-Themen 11
O Beim Schließen JDialog, im Frame-Owner eine Methode starten Java Basics - Anfänger-Themen 6
hdi Desktop-Auflösung abfragen -> setLocation() von Frame Java Basics - Anfänger-Themen 5
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
S Übergabe von Frame-Objekt - kritisch? Java Basics - Anfänger-Themen 7
N Frame in Frame erstellen Java Basics - Anfänger-Themen 2
B Java-Frame Taschenrechner - String -> Int und umgekehrt Java Basics - Anfänger-Themen 8
G Bild wird im falschen Frame angezeigt Java Basics - Anfänger-Themen 5
G Frame soll Focus behalten Java Basics - Anfänger-Themen 2
H Frame schließen Java Basics - Anfänger-Themen 5
G Frame Applet oder doch was anderes Java Basics - Anfänger-Themen 2
M Frame zeigt Desktop als Hintergrund Java Basics - Anfänger-Themen 2
J Eine swf-datei in einen Frame einfügen? Java Basics - Anfänger-Themen 6
K Schrift und Farben im Frame (Anfänger) Java Basics - Anfänger-Themen 2
D Frame in Center Screen Java Basics - Anfänger-Themen 7
A Frame aus Applet erzeugen und mit Inhalt füllen Java Basics - Anfänger-Themen 5
G Problemme mit: Aufruf einer Klasse aus einem Frame Java Basics - Anfänger-Themen 5
M Frame Schließen Java Basics - Anfänger-Themen 5
H homepage in frame aufrufen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben