Anzeigefehler in GridBagLayout durch paintComponent(Graphics g)

bauklotz

Mitglied
Hallo zusammen,

ich habe folgendes Problem, für das ich beim Durchsuchen des Forums leider keine Lösung gefunden habe.

Ich habe ein JFrame ('Hauptfenster'), welches in verschiedene Bereiche unterteilt ist und für das ich deshalb ein GridBagLayout benutze.
Hier der Konstruktor der Klasse.

Java:
public Hauptfenster()
	{
		
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(1200, 800);
		this.setBackground(Color.LIGHT_GRAY); 
		Container contentPane = this.getContentPane();
		GridBagLayout layout = new GridBagLayout();
		contentPane.setLayout(layout);
		GridBagConstraints gbc = new GridBagConstraints();
		
		
		//Label
		gbc.gridx = 0;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weightx = 1;
		gbc.weighty = 1;
		JLabel label = new JLabel("Aktuelle Information:");
		layout.setConstraints(label, gbc);
		contentPane.add(label);
		label.setVisible(true);
		
		//Textfeld
		gbc.gridx = 0;
		gbc.gridy = 2;
		gbc.gridwidth = 1;
		gbc.gridheight = 4;
		gbc.fill = GridBagConstraints.BOTH;
		gbc.weightx = 2;
		gbc.weighty = 4;
		//Erstellen und Einbinden des Textfeldes
		textfeld = new JTextField();
		layout.setConstraints(textfeld, gbc);
		contentPane.add(textfeld);
		//Versehen des Textfeldes mit ScrollPanes
		JScrollPane scrollPane = new JScrollPane(textfeld);
		scrollPane.setVerticalScrollBarPolicy(
			JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		scrollPane.setHorizontalScrollBarPolicy(
			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		layout.setConstraints(scrollPane, gbc);
		contentPane.add(scrollPane);
		textfeld.getDocument().addDocumentListener(dltextfeld);
		textfeld.disable();
		textfeld.setVisible(true);
		
		
		//Button zum Anzeigen der Information
		gbc.gridx = 0;
		gbc.gridy = 6;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weightx = 2;
		gbc.weighty = 1;
		JButton anzeigebutton = new JButton("Information anzeigen");
		anzeigebutton.addActionListener(alAnzeigebutton);
		layout.setConstraints(anzeigebutton, gbc);
		contentPane.add(anzeigebutton);
		anzeigebutton.setVisible(true);
		
		
		//Speicherbutton
		gbc.gridx = 0;
		gbc.gridy = 7;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weightx = 2;
		gbc.weighty = 1;
		JButton speicherbutton = new JButton("in Datei speichern");
		speicherbutton.addActionListener(alSpeicherbutton);
		layout.setConstraints(speicherbutton, gbc);
		contentPane.add(speicherbutton);
		speicherbutton.setVisible(true);
		
		
		
		//Display
		gbc.gridx = 1;
		gbc.gridy = 1;
		gbc.gridwidth = 10;
		gbc.gridheight = 7;
		gbc.fill = GridBagConstraints.BOTH;
		gbc.weightx = 5;
		gbc.weighty = 2;

		//Erstellen und Einbinden des Displays
		Display display = new Display();
		layout.setConstraints(display, gbc);
		contentPane.add(display);
		
		display.repaint();
		display.setVisible(true);
		
}

In der Klasse "Display" wiederum werden verschiedene Komponenten gezeichnet (in der Methode "paintComponent (Graphics g)"), im Einzelnen handelt es sich um ein Rechteck ('punkterechteck') und ein Array voller Punkte (genau genommen 3600 Punkten)(Array 'punkte').

Java:
public void paintComponent (Graphics g){
	

		super.paintComponent(g);
		
		Graphics2D g2 = (Graphics2D)g;
		g2.setColor(Color.black);
		g2.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
		
	
		g2.drawRect((int)punkterechteck[0].xkoordinate,(int)punkterechteck[0].ykoordinate, breite, hoehe);
		
		[COLOR="Red"]for(int x = 0; x< punkte.length; x++){
		    g2.drawLine((int)punkte[x].xkoordinate,(int)punkte[x].ykoordinate, (int)punkte[x].xkoordinate,(int)punkte[x].ykoordinate);
	    }[/COLOR]
	
		
	}

Die Punkte sowie das Rechteck werden im Display auch korrekt angezeigt, allerdings werden die anderen, außerhalb des Displays liegenden Komponenten des JFrames 'Hauptfenster' nicht korrekt, bzw. gar nicht angezeigt. Erst wenn ich zur Laufzeit dahin klicke, wo das Textfeld und die Buttons lokalisiert sind, werden sie angezeigt. Das Label wird überhaupt nicht angezeigt.

Woran kann das liegen? Habe schon mit Validate(), Revalidate() und Repaint() herumexperimentiert, ohne Erfolg :(

Wenn ich übrigens den rot markierten Teil der Methode 'paintComponent' auskommentiere und dementsprechend die Punkte nicht anzeige und nur das Rechteck, besteht das Problem nicht mehr und alle Komponenten des JFrames, bzw. des GridBagLayouts werden angezeigt.


Ich hoffe, ich habe das Problem halbwegs verständlich geschildert und ich hoffe, dass mir jemand von Euch helfen kann.

Vielen Dank schon einmal im Voraus.
 

Michael...

Top Contributor
Hab jetzt Deinen Code nur überflogen und konnte da jetzt nichts auffälliges finden (ausser die vielen setVisible() auf die einzelnen Komponenten - die sind bei der Initialisierung automatisch sichtbar).
Habe aber ein paar allgemeine Fragen:
Tritt das Problem tatsächlich nur im Zusammenhang mit dem GridBagLayout auf?
Funktioniert es wenn in der Display Komponente nur eine einzige Linie gezeichnet wird?

Vermute mal, das wenn in der paintComponent() ziemlich viel gezeichnet wird, der EDT ausgebremst wird.
Wenn dem so ist, dann wurde ich diese Sachen in einem ausgelagerten Thread auf ein BufferedImage zeichnen und in der paintComponent() dann einfach nur das Bild zeichnen lassen.
 

bauklotz

Mitglied
Hallo Michael...,

vielen Dank erstmal für Deine schnelle Antwort.

Habe erstmal getestet, ob das Problem bei nur einem Punkt (ist zwar Methode 'drawLine', zeichnet aber nur einen Punkt, geht ja bekanntermaßen in Java nicht anders) auch auftritt. Und das Ergebnis ist, dass es dann einwandfrei funktioniert. Ebenso, wenn ich z.B zwei einzelne Punkte zeichne.

Habe außerdem jetzt festgestellt, dass ich, wenn das Problem auftritt, parallel eine java.lang.NullPointerException auf genau diese Codezeile kriege.

Vielleicht liegt mein Problem ja auch in der for-Schleife. Ich werde nochmal das Array 'punkte' unter die Lupe nehmen müssen.

Könnte es denn tatsächlich sein, dass sich eine NullPointerException im Display so auswirkt, dass Komponenten, die eigentlich nichts mit dem Display zu tun haben, nicht vernünftig angezeigt werden?
 

bauklotz

Mitglied
Hallo Michael...,

das Problem ist gelöst.:toll:
Ich habe das Array 'punkte' nochmal auf Korrektheit überprüft und es war tatsächlich ein Fehler verborgen, der aber sehr schwer zu finden war.

Um meine eigene letzte Frage zu beantworten, es ist offensichtlich tatsächlich so, dass ein solcher Fehler verbunden mit einer NullPointerException die Darstellung anderer Komponenten beeinflusst. Ob das aber am GridBagLayout liegt, weiß ich nicht.

Ich danke Dir vielmals für Deine Hilfe. Besonders Deine Nachfrage, ob das Problem auch bei einem einzigen drawLine- Befehl auftritt, hat mich auf den richtigen Weg gebracht.

Vielen Dank und schöne Grüße,

bauklotz
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Swing Anzeigefehler bei JTree AWT, Swing, JavaFX & SWT 1
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
frankred Swing Canvas nach "Window-resize" neu Zeichnen lassen wegen Anzeigefehler AWT, Swing, JavaFX & SWT 4
N JList (JXList) ListCellRenderer zur Laufzeit ändern (Anzeigefehler) AWT, Swing, JavaFX & SWT 6
M Anzeigefehler nach langer Laufzeit der Applikation AWT, Swing, JavaFX & SWT 4
S GridBagLayout Felder formatieren AWT, Swing, JavaFX & SWT 1
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
C GridbagLayout verstehen lernen AWT, Swing, JavaFX & SWT 1
H GridBagLayout macht mich wahnsinnig :-( AWT, Swing, JavaFX & SWT 5
BabySuna darstellungsprobleme mit JTabbedPane und GridBagLayout AWT, Swing, JavaFX & SWT 8
CptK Positionieren von Elementen in GridBagLayout AWT, Swing, JavaFX & SWT 4
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
Mario1409 AWT GridBagLayout AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
T LayoutManager Anordnen der Elemente im GridBagLayout AWT, Swing, JavaFX & SWT 11
K GridBagLayout mit reponsive Design AWT, Swing, JavaFX & SWT 2
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
T GridBagLayout Anfängerprobleme AWT, Swing, JavaFX & SWT 3
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
M Gridbaglayout Spaltenbreite AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout passt seine größe nicht an AWT, Swing, JavaFX & SWT 3
V GridBagLayout AWT, Swing, JavaFX & SWT 4
N LayoutManager GridBagLayout - Grundlagen AWT, Swing, JavaFX & SWT 6
Neumi5694 Swing Gridbaglayout - automatische Anpassung verhindern AWT, Swing, JavaFX & SWT 1
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
M Swing GridBagLayout Komponentengröße festsetzen AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
W GridBagLayout Größe geben AWT, Swing, JavaFX & SWT 1
HarleyDavidson Swing Seltsames Verhalten GridBagLayout AWT, Swing, JavaFX & SWT 11
W GridBagLayout mit fester Zellgrösse AWT, Swing, JavaFX & SWT 2
N Swing GridBagLayout: Ein Pixel Versatz AWT, Swing, JavaFX & SWT 2
B Swing Gridbaglayout unterschiedliche Zeilenhöhe AWT, Swing, JavaFX & SWT 6
H LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 1
N GridBagLayout - was fehlt? AWT, Swing, JavaFX & SWT 8
S Swing rowHeight und rowWeight im GridBagLayout AWT, Swing, JavaFX & SWT 1
N Swing GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 4
A jpanel mit gridbaglayout auf hintergrundbild AWT, Swing, JavaFX & SWT 7
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
G GridBagLayout AWT, Swing, JavaFX & SWT 6
S GridBagLayout "links-rechts-layouten" AWT, Swing, JavaFX & SWT 7
T LayoutManager GridBagLayout / erwartetes Raster fehlt AWT, Swing, JavaFX & SWT 3
X Gridbaglayout gridx + gridy auslesen? AWT, Swing, JavaFX & SWT 7
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
N GridBagLayout - Zeitplan AWT, Swing, JavaFX & SWT 13
N Swing GridbagLayout AWT, Swing, JavaFX & SWT 4
S Swing gridbaglayout AWT, Swing, JavaFX & SWT 8
G GridBagLayout Problem AWT, Swing, JavaFX & SWT 4
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
X LayoutManager gridBagLayout wird nicht richtig Dargestellt AWT, Swing, JavaFX & SWT 5
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
N LayoutManager GridBagLayout schummeln erlaubt ? AWT, Swing, JavaFX & SWT 2
D GridBagLayout AWT, Swing, JavaFX & SWT 9
A Swing GridBagLayout - constraints.anchor scheint nicht korrekt zu funktionieren? AWT, Swing, JavaFX & SWT 7
J Swing Terminkalender Wochenansicht mit Gridbaglayout oder JTable AWT, Swing, JavaFX & SWT 16
C LayoutManager GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 5
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
R GridBagLayout in GridBagLayout AWT, Swing, JavaFX & SWT 2
H Positionierungsprobleme beim GridBagLayout AWT, Swing, JavaFX & SWT 16
Furtano AWT GridBagLayout macht mir Sorgen AWT, Swing, JavaFX & SWT 3
A GridbagLayout positionierungsproblem AWT, Swing, JavaFX & SWT 4
earlgrey_tea GridBagLayout Componenten proportional vergößern AWT, Swing, JavaFX & SWT 12
D JTable im GridBagLayout -> gridwidth AWT, Swing, JavaFX & SWT 6
T GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
D Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 8
J Swing GridBagLayout: Links-nach-rechts Orientierung statt zentriert AWT, Swing, JavaFX & SWT 12
R Größe eines Labels bei GridBagLayout festlegen AWT, Swing, JavaFX & SWT 9
B GridBagLayout Problem AWT, Swing, JavaFX & SWT 3
M LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 11
E LayoutManager GridBagLayout in BorderLayout - Abstand bei Resizing AWT, Swing, JavaFX & SWT 2
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
L LayoutManager GridBagLayout leere Zeilen AWT, Swing, JavaFX & SWT 4
H LayoutManager Layout mit GridBagLayout machbar? AWT, Swing, JavaFX & SWT 6
N GridBagLayout Problem AWT, Swing, JavaFX & SWT 6
C Swing JTable "zerstört" GridBagLayout AWT, Swing, JavaFX & SWT 9
N LayoutManager GridBagLayout Größe fixieren AWT, Swing, JavaFX & SWT 3
M GridBagLayout AWT, Swing, JavaFX & SWT 7
V Swing Gridbaglayout Leeres Fenster AWT, Swing, JavaFX & SWT 2
R LayoutManager GridBagLayout Fragen AWT, Swing, JavaFX & SWT 10
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
M LayoutManager Einige Fragen zum GridBagLayout AWT, Swing, JavaFX & SWT 13
N GridBagLayout AWT, Swing, JavaFX & SWT 11
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
Y Swing GridbagLayout JTextfield zu klein AWT, Swing, JavaFX & SWT 5
L LayoutManager GridBagLayout spielt verrückt AWT, Swing, JavaFX & SWT 9
T LayoutManager GridBagLayout an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 2
J Java GUI mit GridBagLayout AWT, Swing, JavaFX & SWT 3
Y LayoutManager Problem mit Gridbaglayout AWT, Swing, JavaFX & SWT 8
hdi LayoutManager GridBagLayout AWT, Swing, JavaFX & SWT 9
W GridBagLayout Falsche Größenanpassung AWT, Swing, JavaFX & SWT 6
R Swing Button-Größe in JPanel mit GridBagLayout nicht änderbar AWT, Swing, JavaFX & SWT 3
E Problem mit meiner GUI/GridbagLayout AWT, Swing, JavaFX & SWT 2
M LayoutManager GradientPaint auf GridBagLayout AWT, Swing, JavaFX & SWT 5
D LayoutManager GridBagLayout, Änderung zur Laufzeit AWT, Swing, JavaFX & SWT 4
G LayoutManager per Button GridBagLayout + Inhalt ändern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben