Darstellungsproblem mehrerer Komponenten

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo Experten,

ich bin neu, was den Bereich Swing und Grafik generell angeht. Deswegen befürchte ich auch, dass ich bei meinem momentanen Problem etwas grundlegendes falsch mache. Ich finde aber um's verrecken alleine nicht raus was.

Ich versuche derzeit in einem JFrame mit GridLayout von 10mal10 Felder insgesamt 100 kleine JPanels darzustellen, in denen ich etwas zeichnen möchte.

Das Problem ist jetzt, dass ich genau ein FieldPanel oben links im JFrame angezeigt bekomme. Der Rest ist nur zu sehen, wenn ich das Window resize. Was stimmt in meinem Ablauf nicht?

Code:
public class MapPanel extends JFrame {
	static final long serialVersionUID = 123456476596534500l;
	
	private FieldPanel[][] map;
	
	  public MapPanel(){
		  super();
		  map = new FieldPanel[10][10];
		  this.setSize(500, 500);
		  this.setLayout(new GridLayout(10,10));
		  for (int i=0;i<10;i++){
			  for (int j=0;j<10;j++){
				  map[i][j]=new FieldPanel();
				  this.add(map[i][j]);
			  }
		  }
	  }
}

Code:
public class FieldPanel extends JPanel {
        static final long serialVersionUID = 1234564645645700l;	
        private Ellipse2D.Double circle =
            new Ellipse2D.Double(0, 0, 60, 30);
        private Rectangle2D.Double square =
            new Rectangle2D.Double(0, 0, 60, 30);

  public FieldPanel(){
	  this.setPreferredSize(new Dimension(60,30));
  }
  @Override
  public void paintComponent(Graphics g) {
	  super.paintComponent(g);
          Graphics2D g2d = (Graphics2D)g;
          g2d.draw(circle);
          g2d.draw(square);
          this.setBounds(0,0,60,30);
          this.setBackground(Color.blue);
  }
}

MapPanel war ursprünglich ein JPanel, das in einem JFrame dargestellt werden soll, aber ich habe erstmal eine Stufe rausgenommen. (hat aber nix genutzt :) )

Code:
public static JFrame openInJFrame(JFrame frame,
                                    int width,
                                    int height,
                                    String title,
                                    Color bgColor) {
      frame.setBackground(bgColor);
      frame.setSize(width, height);
      frame.addWindowListener(new ExitListener());
      frame.setResizable(true);
      //frame.pack();
      frame.setVisible(true);
      return(frame);
  }

Gruß
Torsten
 

Kaladial

Bekanntes Mitglied
hmmm wenn es nur angezeigt wird wenn du es resized dann fehlt wahrscheinlich nen repaint bzw validate();

einfach mal als letztes nen frame. repaint oder frame.validate mit reinschreiben wenns net geht guck ich nochmal in den code :)
 

Sivar

Mitglied
So, ich habe mich spontan erstmal registriert. Jetzt ist das auch etwas weniger anonym :)

Also repaint() und validate() haben nichts gebracht. Ich habe sie direkt vor frame.setVisible() ausgeführt.
 

Kaladial

Bekanntes Mitglied
so hab erstmal nen eigenständig laufendes prog draus gemacht...

also im mom wird ja nur openInJFrame aufgerufen
du willst auf das frame ja sicher noch deine mappanels drauf packen wie sieht n da deine funktion aus?


Code:
package testapp;

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;


public class testframe {

	public class MapPanel extends JFrame { 
		static final long serialVersionUID = 123456476596534500l; 
		
		private FieldPanel[][] map; 
		
		public MapPanel(){ 
			super(); 
			map = new FieldPanel[10][10]; 
			this.setSize(500, 500); 
			this.setLayout(new GridLayout(10,10)); 
			for (int i=0;i<10;i++){ 
				for (int j=0;j<10;j++){ 
					map[i][j]=new FieldPanel(); 
					this.add(map[i][j]); 
				} 
			} 
		} 
	}
	
	public class FieldPanel extends JPanel { 
        static final long serialVersionUID = 1234564645645700l;    
        private Ellipse2D.Double circle = new Ellipse2D.Double(0, 0, 60, 30); 
        private Rectangle2D.Double square = new Rectangle2D.Double(0, 0, 60, 30); 

        public FieldPanel(){ 
        	this.setPreferredSize(new Dimension(60,30)); 
        } 
        @Override 
        public void paintComponent(Graphics g) { 
        	super.paintComponent(g); 
        	Graphics2D g2d = (Graphics2D)g; 
        	g2d.draw(circle); 
        	g2d.draw(square); 
        	this.setBounds(0,0,60,30); 
        	this.setBackground(Color.blue); 
        } 
	}
	
	public static JFrame openInJFrame(JFrame frame, int width, int height, String title, Color bgColor) { 
		frame.setBackground(bgColor); 
		frame.setSize(width, height); 
		frame.setResizable(true);
		frame.setVisible(true); 
		return(frame); 
	}

	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame frame = new JFrame();
		openInJFrame(frame, 150, 150, "test",  Color.red);
	}

}
 

Sivar

Mitglied
Die Main() sieht für das Beispiel so aus:

Code:
public static void main(String[] args) {
	TestFrame tf = new TestFrame(); 
	TestFrame.MapPanel map = tf.new MapPanel();
	openInJFrame(map, 150, 150, "test",  Color.red);
}

Ich schachtel die MapPanel nicht nochmal in einem JFrame. Ursprünglich war die Idee, dass MapPanel ein JPanel ist, dass ich dann dem JFrame hinzufüge. (über setConentPane() ) Aber zur Vereinfachung habe ich die Stufe rausgenommen. (Ist momentan nicht wichtig, ob mir die Titelleiste beim zeichnen im Weg ist oder nicht...)
 

Sivar

Mitglied
Ok, hier ist die Lösung: Benutze nie die selben Werte für alle Elemente beim Aufruf von setBounds()!!! :lol: (siehe Zeile 46). Dadurch wurden alle FieldPanels übereinander geschoben. Seltsam und irritierend ist nur, dass sie beim Vergrößern oder Verkleinern des Fensters korrekt sichtbar waren....
 

Marco13

Top Contributor
Bei einem resize wird die falsche Angabe der Bounds vom LayoutManager korrigiert. Allerdings ist es doch ein bißchen "Zufall", dass es funktioniert, weil man in der paintComponent auf keinen Fall(!) so etwas wie setBounds oder setBackground aufrufen sollte. paintComponent ist zum painten da. Ansonsten hieße sie nicht paintComponent, sondern paintComponentAndDoSomeOtherThingsOfWhichIDontKnowWhereToDoThem
 

Sivar

Mitglied
Hm, dass das da nicht hingehört mag sein. Aber wie gesagt, ich fang ja erst an. :) Im Übrigen wäre eine paintComponentAndDoSomeOtherThingsOfWhichIDontKnowWhereToDoThem-Methode vielleicht gar nicht schlecht....wobei der Name ist ziemlich lang, oder? :lol:
 

Marco13

Top Contributor
Das grenzt dann schon an diese berühmt-berüchtigte Klasse
sun.java.special.secret.DoClass
die eine Methode
public Object doWhatIWant(String whatIWant);
anbieten soll, und nach der hier so häufig (wenn auch nur indirekt) gefragt wird :wink:
 

Sivar

Mitglied
Hm, Sun könnte ja wenigstens mal ein entsprechendes Interface zur Verfügung stellen....vielleicht implementiert es ja wer... :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JSF Darstellungsproblem AWT, Swing, JavaFX & SWT 0
VfL_Freak Darstellungsproblem mit Dialog AWT, Swing, JavaFX & SWT 8
H Swing Darstellungsproblem JPanel in JPanel in JScrollpane in JSplitPane AWT, Swing, JavaFX & SWT 4
heart_disease Darstellungsproblem mit JTable AWT, Swing, JavaFX & SWT 4
D Darstellungsproblem des eigenen TreeModel bei Veränderungen AWT, Swing, JavaFX & SWT 7
S Darstellungsproblem mit JButton AWT, Swing, JavaFX & SWT 3
H Darstellungsproblem mit Kartenspiel AWT, Swing, JavaFX & SWT 3
V Darstellungsproblem mit Canvas AWT, Swing, JavaFX & SWT 6
R 3D-Grafik Verwendung mehrerer Texturen AWT, Swing, JavaFX & SWT 1
R Auswahl mehrerer JComboBoxen verknüpfne AWT, Swing, JavaFX & SWT 17
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
Furtano AWT Skalierung mehrerer Bilder / Histogramme im Fenster AWT, Swing, JavaFX & SWT 4
K richtiges Ausrichten mehrerer Labels AWT, Swing, JavaFX & SWT 3
M Ansätze zur Kombination mehrerer Listener für Interaktion AWT, Swing, JavaFX & SWT 19
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
M auslesen mehrerer JComboBoxen funktioniert nicht AWT, Swing, JavaFX & SWT 9
M Swing Selektion mehrerer JToggleButton's in einer Gruppe AWT, Swing, JavaFX & SWT 5
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
D Überwachung mehrerer Textfelder AWT, Swing, JavaFX & SWT 4
S Aufbau mehrerer verschiedener grafischer Oberflächen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen

Neue Themen


Oben