Gezeichnete Rechtecke werden nicht dargestellt

Status
Nicht offen für weitere Antworten.

spidermobile

Bekanntes Mitglied
Hallo zusammen,

ich versuche gerade ein Spielfeld zu erstellen. Der erste Teil funktioniert auch prima. Nun wollte ich nachträglich noch Rechtecke zeichnen und hinzufügen (Die Positionierung im beigefügten Code passt noch nicht, aber wie auch kann Sie ja nicht sehen *gg*).

Leider weiss ich nicht, warum diese nicht angezeigt werden. Es handelt sich im folgenden Code um den Vector image, den ich erzeuge und danach gerne anzeigen würde. Was habe ich falsch gemacht?

Code:
package project.gui;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import project.gui.listener.ButtonListener;


/**
 * Das Hauptfenster ist das eigentliche Zentrum des Programms. Es sorgt daf�r,
 * dass alle graphischen Elemente angezeigt werden, und dass �berall das zu
 * bearbeitende Bild bekannt ist.
 */

public class MainFrame extends JFrame {

	private static final long serialVersionUID = 3258131345233623349L;

	private JPanel panel;
	private MainMenu mainMenu;
	private JButton startCalc, newCalc;
	private Vector image = new Vector();
	
	private MyJTextField[][] problem = new MyJTextField[9][9];
	
	private Color bgcolor = new Color(118, 146, 196);
	private Color cellsColor = new Color(222, 222, 222);
	private Font fett = new Font("Arial Bold", 1, 16);

	public MainFrame() {

		setTitle("Spielfeld");

		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

		Container contentPane = getContentPane();

		panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(bgcolor);

		mainMenu = new MainMenu(this);
		setJMenuBar(mainMenu);

		setSize(560, 560);
		setLocationRelativeTo(null);

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				exit();
			}
		});

//		Rahmen für Spielfeld
		for (int j = 0; j < 3; j++ ){
			for( int i = 0; i < 3; i++ ){
				int x1 = (100 + (j * 120));
		    	int x2 = (100 + (j * 120));
		    	int y1 = 120;
		    	int y2 = 120;
		    	Color color = new Color(0,0,0);
		    	boolean fill = true;
		    	image.add( new Rechteck( x1, x2, y1, y2, color, fill ));
	    	}
  		}
		
		createSudokuPanel();
		createControlPanel();
		contentPane.add(panel);
	}

	private void createSudokuPanel() {

		boolean flag = false;

		for (int y = 0; y < 9; y++) {
			for (int x = 0; x < 9; x++) {

				problem[y][x] = new MyJTextField();
				problem[y][x].setFont(fett);
				problem[y][x].setHorizontalAlignment(SwingConstants.CENTER);
				// problem[y][x].setBorder(null);
				
				if (flag) {
					problem[y][x].setBackground(Color.WHITE);
					flag = false;
				} else {
					problem[y][x].setBackground(cellsColor);
					flag = true;
				}
				panel.add(problem[y][x]);
				problem[y][x].setBounds(100 + (y * 40), 60 + (x * 40), 40, 40);
			}
		}
	}

	private void createControlPanel() {
		
		startCalc = new JButton("Starte Berechnung");
		panel.add(startCalc);
		startCalc.setBounds( 100, 450, 150, 20);
		startCalc.addActionListener(new ButtonListener(problem, "startCalc", this));
		
		newCalc = new JButton("Neues Spielfeld");
		panel.add(newCalc);
		newCalc.setBounds( 310, 450, 150, 20);
		newCalc.addActionListener(new ButtonListener(problem, "newCalc", this));
	}
	
	  // Figur hinzufügen
	  public void add( Paintable p ){
		image.add( p );
		repaint();
	  }

	  // Bild zeichnen
	  protected void paintComponent( Graphics g ){
		for( int i = 0; i < 9; i++ )
		  ((Paintable)image.get(i)).paint( g );
	  }

		public void exit() {
			System.exit(0);
		}
}


//Oberklasse, für gemeinsahme Grundlage
abstract class Paintable{
  private int x, y, w, h;
  private Color color;
  private boolean fill;

  public Paintable( int x, int y, int w, int h, Color color, boolean fill ){
	this.x = x;
	this.y = y;
	this.w = w;
	this.h = h;
	this.color = color;
	this.fill = fill;
  }

  public abstract void paint( Graphics g );

  public int getX(){  return x;  }
  public int getY(){  return y;  }
  public int getWidth(){  return w;  }
  public int getHeight(){  return h;  }
  public Color getColor(){ return color; }
  public boolean isFill(){ return fill; }
}

class Rechteck extends Paintable {
	  public Rechteck( int x, int y, int w, int h, Color color, boolean fill){
		super( x, y, w, h, color, fill );
	  }
	  public void paint( Graphics g ){
		g.setColor( getColor() );
		if( isFill() )
		  g.fillRect( getX(), getY(), getWidth(), getHeight() );
		else
		  g.drawRect( getX(), getY(), getWidth(), getHeight() );
	  }
}
 
B

Beni

Gast
Guck die Bedingung der Forschlaufe in "paintComponent" mal ganz genau an. Wundere dich nicht, dass du genau 9 (Wink mit dem Zaunpfahl) Elemente siehst... :wink:
 
R

Roar

Gast
is das sudoko feld nicht außerdem 3x3 felder groß und nicht 9x9 ? ;)
 

spidermobile

Bekanntes Mitglied
Hallo Beni,

ich bin bestimmt zu doof, den Wink mit dem Zaunpfahl zu erkennen. Es sollen ja mal 9 werden 3x3. Aber leider sehe ich gar keins *heul*.

Hallo Roar,
doch, die 9x9 Felder habe ich ja schon gezeichnet. Diese werden auch angezeigt. Nun wollte ich noch die Rahmen um die 3x3 Felder zeichen. Das funktioniert leider nicht.

Bitte gebt mir noch einen Tipp!

Danke!
 

SebiB90

Top Contributor
Roar hat gesagt.:
is das sudoko feld nicht außerdem 3x3 felder groß und nicht 9x9 ? ;)
ne 9x9 ist richtig
es gibt 3x3 felder und diese werden dann nochmals 3x3 angeordnet

und @threadersteller hab mir jetzt nich den code ganz angeguckt aber pack doch 3x3 panels in ein großen panel und in die einzelnen panels packst du dann die 3x3 felder rein. dann kannste bei den einzelnen panels ein border drum machen
 

spidermobile

Bekanntes Mitglied
Hi,

ich glaube das Spielfeld schon verstanden zu haben. Habe 9x9 Textfelder angeordnet. Diese werden auch angezeigt. Zur besseren Darstellung werden um die 3x3 Quadrate jeweils Rahmen gezeichnet. Und diese bekomme ich nicht hin.

Also 81 Textfelder O.K.! 3x3 Rahmen um jewels 9 Felder (Quadrat) werden leider nicht angezeigt.

O.K. das mit den Panels wäre eine Idee, danke! Würde trotzdem gerne wissen, warum die gezeichneten Rechtecke nicht angezeigt werden.
 

SebiB90

Top Contributor
spidermobile hat gesagt.:
Hi,

ich glaube das Spielfeld schon verstanden zu haben. Habe 9x9 Textfelder angeordnet. Diese werden auch angezeigt. Zur besseren Darstellung werden um die 3x3 Quadrate jeweils Rahmen gezeichnet. Und diese bekomme ich nicht hin.

Also 81 Textfelder O.K.! 3x3 Rahmen um jewels 9 Felder (Quadrat) werden leider nicht angezeigt.
jo so ist es richtig,probiers mal mit den panels wie oben (nach mehrigen editieren) beschrieben.
 

SebiB90

Top Contributor
so hab code angeguckt
das problem:
das zeichnest auf dem fenster und das gezeichnete wird mit dem panel verdeckt
das ist schon alles.
 

spidermobile

Bekanntes Mitglied
Hi SebiB90,

ja muss ich wohl machen, wenn meine Lösung nicht möglich ist. Aber das glaube ich einfach nicht. Vielleicht gibt es ja noch einen Tipp für meinen Ansatz. Es geht mir auch darum zu verstehen, warum meine Rechtecke nicht angezeigt werden. Sonst lerne ich das mit dem paint...geraffel nie!
 

spidermobile

Bekanntes Mitglied
Hi SebiB90,

man sollte es wohl nicht glauben, aber mit dem Paint hab ich es nicht so. Hab ein anderes Projekt gemacht und den Code in dieses Projekt reinkopiert. Aus meiner Sicht ist alles identisch.
Wo steckt nun das Geheimnis, die Rechtecke auf dem Panel zu zeichnen?
 

SebiB90

Top Contributor
spidermobile hat gesagt.:
Hi SebiB90,

ja muss ich wohl machen, wenn meine Lösung nicht möglich ist. Aber das glaube ich einfach nicht. Vielleicht gibt es ja noch einen Tipp für meinen Ansatz. Es geht mir auch darum zu verstehen, warum meine Rechtecke nicht angezeigt werden. Sonst lerne ich das mit dem paint...geraffel nie!
also du malst mit paint auf dem contentPane und auf dieses contentPane wird dann das panel gelegt, also so als ob du ein blatt da darauf legst. also müsstest du auf das Panel zeichnen und nicht auf contentPane
 

spidermobile

Bekanntes Mitglied
:oops: :oops: :oops: das kommt davon, wenn man den Code einfach zusammenkopiert ohne diesen genau zu verstehen. Das mit dem Panel und dem Blatt habe ich verstanden, aber ich weiss leider nicht, was ich nun konkret verändern muss. :oops: :oops: :oops:
 

SebiB90

Top Contributor
hol dir mit panel.getGraphics() das Graphics Object von dem panel und speicher es in einer klassenvariable
und in der paint malst du dann auf das grahics object

oder du trennst das fenster vom panel also das du 2 klassen hast einmal extends JFrame wie jetzt und noch ne 2. mit extends JPanel und in der kannste dann die paint methode überschreiben dann wirds auch angezeigt
 
B

Beni

Gast
spidermobile hat gesagt.:
Hallo Beni

ich bin bestimmt zu doof, den Wink mit dem Zaunpfahl zu erkennen. Es sollen ja mal 9 werden 3x3. Aber leider sehe ich gar keins *heul*.

Hrmf, drück dich ein bisschen klarer aus. Ich verstand dich so: 9 Felder werden angezeigt, aber du kannst keine weiteren zeichnen.

Egal: deine for-Schleife zeichnet immer 9 Elemente, ganz egal wie gross "image" tatsächlich ist. Solltest du jemals ein 10.tes Element in "image" speichern, wirst du nichts sehen (statt 9, image.size() eintragen).
 

spidermobile

Bekanntes Mitglied
Ok, überzeugt, ich habe es nun mit unterschiedlichen Panels gelöst. Die andere Variante hab ich nicht hinbekommen.

Danke für die Unterstützung!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J MouseListener fuer gezeichnete Polyline Java Basics - Anfänger-Themen 3
H gezeichnete Linie Eventhandling Java Basics - Anfänger-Themen 2
J Das Gezeichnete auf JPanel verschwindet nach minimize Java Basics - Anfänger-Themen 4
S gezeichnete Objekte werden bei Start nicht angezeigt Java Basics - Anfänger-Themen 4
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
B Beliebig viele Rechtecke erzeugen Java Basics - Anfänger-Themen 5
K zwei Rechtecke auf Berührung prüfen Java Basics - Anfänger-Themen 2
S mehrere Rechtecke in ein Panel Java Basics - Anfänger-Themen 2
M flaeche 2er schneidender rechtecke Java Basics - Anfänger-Themen 6
S Rechtecke zu moeglichst groesseren Rechtecken kombinieren? Java Basics - Anfänger-Themen 7
L rechtecke zeichnen anhand von matrix Java Basics - Anfänger-Themen 27
B wie kann man mehrere rechtecke erzeugen? Java Basics - Anfänger-Themen 3
I Kollision zweier Rechtecke Java Basics - Anfänger-Themen 9
H Rechtecke, Quadrate. Was soll ich machen? Java Basics - Anfänger-Themen 2
J rechtecke als hintergrund / thread Java Basics - Anfänger-Themen 4
A Schnitt zweier Rechtecke ermitteln Java Basics - Anfänger-Themen 2
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
R Audio kann nur zum Teil gestoppt werden Java Basics - Anfänger-Themen 1
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
docmas 2DArray Werte werden nur untereinander ausgegeben Java Basics - Anfänger-Themen 1
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
U Hauptklasse kann nicht gefunden werden Java Basics - Anfänger-Themen 8
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
C java.sql Statement kann nicht geschlossen werden Java Basics - Anfänger-Themen 9
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
D Codeblöcke, die immer wieder im Programmverlauf benötigt werden Java Basics - Anfänger-Themen 5
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
H Eclipse kann nicht gestartet werden .... Java Basics - Anfänger-Themen 15
R Warum werden hier nur die grün und orangen Linien ausgegeben und der Rest unten nicht? Java Basics - Anfänger-Themen 5
J Eckige Klammern werden nicht erkannt Java Basics - Anfänger-Themen 1
J Klammern werden fälschlicherweise eingelesen Java Basics - Anfänger-Themen 2
Elyt Bei Monopoly werden Felder übersprungen Java Basics - Anfänger-Themen 2
Kirby.exe Hauptklasse konnte nicht gefunden werden.... Java Basics - Anfänger-Themen 27
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
L Muss eine HttpURLConnection geschlossen werden? Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
V Array, Symbol kann nicht gefunden werden Java Basics - Anfänger-Themen 2
S TableView Items werden nicht angezeigt (+Verständnisfragen) Java Basics - Anfänger-Themen 15
O Apache: Log-Settings werden nicht gezogen Java Basics - Anfänger-Themen 0
H LayoutRes, Nullable und SystemServices werden in LayoutInflater nicht importiert Java Basics - Anfänger-Themen 9
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
L Input/Output AudioInputStream kann nicht erstellt werden. Java Basics - Anfänger-Themen 3
E Die Hauptklasse konnte nicht gefunden werden. Java Basics - Anfänger-Themen 12
H Hauptklasse ... konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 8
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
S Hauptklasse konnte nicht gefunden werden Java Basics - Anfänger-Themen 0
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
A Harshad Zahlen sollen in einem Intervall ausgegeben werden Java Basics - Anfänger-Themen 8
M GUI Startbutton und Titel werden nicht angezeigt Java Basics - Anfänger-Themen 1
F Variablen JTextField-Inhalt kann nicht mit String abgeglichen werden Java Basics - Anfänger-Themen 2
F Interface JButtons werden nicht angezeigt... Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Bilder werden nicht angezeigt! Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert JLabels werden nicht angezeigt Java Basics - Anfänger-Themen 4
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Fehler: Hauptklasse bin.demo.Start konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 2
M Klassen Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 17
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
S Classpath "Hauptklasse konnte nicht gefunden oder geladen werden" Java Basics - Anfänger-Themen 6
T In Konsole darf nichts falsches eingetippt werden?! Java Basics - Anfänger-Themen 7
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
C AppletViewer-Eigenschaftendatei kann nicht gelesen werden Java Basics - Anfänger-Themen 0
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben