Swing JTextArea - beim neuzeichnen bleibt manchmal weißer Kasten

P@u1

Aktives Mitglied
Hallo,

ich habe im Moment ein Problem mit einer JTextArea, die dazu da ist, anzuzeigen, wenn es Verbindungsprobleme gibt.
Kurze Info: Mein Programm plottet ein EKG-Signal, dass über ein serielle Schnittstelle empfangen wird.
Ich habe also oben in der Mitte auf einen JPanel der auf einem JFrame liegt eine JTextArea hinzugefügt und die Hintergründe aller drei Komponenten sind auf schwarz eingestellt.
Standardmäßig ist der Text der JTextArea leer, sobald es Verbindungsprobleme gibt, wird er zu "Verbindung unterbrochen!" geändert.
Das funktioniert auch alles ganz gut, nur leider kommt es manchmal dazu, dass der Hintergrund nicht richtig gezeichnet wird, es bleibt dann ein kleiner weißer Kasten auf dem Bildschirm.
Sobald ich die Fenstergröße ändere, verschwindet dieser Kasten auch, ich finde das aber trotzdem nicht gut und dachte, ihr könnt mir vielleicht weiterhelfen.
Ich hänge auch ein Bild an, auf dem ihr euch diesen Kasten ansehen könnt.
Vielen Dank schonmal für eure Hilfe!
 

Anhänge

  • WeißerKasten.JPG
    WeißerKasten.JPG
    31,1 KB · Aufrufe: 69

P@u1

Aktives Mitglied
hier dann noch ein paar weitere Infos:

So füge ich das Textfeld hinzu:
Java:
JTextArea textArea = new JTextArea("", 1, 10);
textArea.setBackground(Color.black);
textArea.setForeground(Color.red);
textArea.setEditable(false);
textArea.setFont(new Font("TimesRoman", Font.PLAIN,  30));
//textArea.setVisible(false);
//textArea.setPreferredSize(new Dimension(160, 20));
panel.add(textArea);

später ändere ich nur noch den Text:
Java:
x.getTextArea().setText(" Verbindung unterbrochen!");
bzw.
Java:
x.getTextArea().setText("");

früher hatte ichs mal mit visibility gemacht, aber das hatte noch größere Probleme geben, weiß nur nicht mehr genau was, ich glaube da war dann auch ein Problem mit dem Hintergrund oder was ähnliches.

Was sonst noch erwähnenswert ist:
Ich habe am Anfang die Hintergrundfarbe vom Frame, vom Panel und vom Textfeld auf schwarz gesetzt und alle repaint / paint methoden außer eine habe ich nicht verändert, hier mal die die ich verändert habe:

Beim paintComponent des panels passiert folgendes:
Java:
@Override
	protected void paintComponent(Graphics g)
	{
		if (assignedSignal != null)
		{
			for(Plotter x: assignedSignal.getPlotter())
			{
				x.setWidth(this.getWidth());
				x.setRefreshRequested(true);
			}
		}
	}

Kann es vielleicht sein, dass es schlecht war, das zu überschreiben, weil dadurch bestimmte sachen nicht mehr neu gezeichnet werden?
Müsste ich vielleicht darin noch etwas aufrufen, was ich durchs überschreiben weggenommen habe oder so?
Außerdem fällt vll auf, dass ich nur ein flag dort setze (refreshRequested) , was zum neuzeichnen führt, sobald das nächste mal gezeichnet wird.
Früher hatte ich einfach direkt dort neuzeichnen lassen, was aber sehr unzuverlässig war, weil fast immer nach dem ändern der größe des fensters die neugezeichneten sachen verschwunden waren (während der veränderung der größe waren sie da!).
Dazu möchte ich noch anmerken, dass das mit dem neuzeichnen das gemacht wird, wenn refreshRequested auf true (wenn der plotTimer das nächste mal aufgerufen wird) auch nicht 100% zuverlässig ist, so in 5% der Fälle, wenn ich die Größe des Fensters ändere oder ähnliches, verschwindet am Ende auch die Neuzeichnung...

So, das waren noch ein paar Details, ich hoffe, ihr könnt mir noch etwas helfen.
Nicht nur das mit der Textarea ist das Problem, sondern das andere neuzeichnenproblem auch.

Bei Bedarf stelle ich evtl. mal den ganzen code (als dateien) rein.
 

Marco13

Top Contributor
Nur kur überflogen, aber normalerweise sollte man in einer überschriebenen paintComponent-Methode immer auch super.paintComponent aufrufen
Java:
@Override
protected void paintComponent(Graphics g)
{
    super.paintComponent(g);
    ...
}

Das könnte auch in diesem Fall schon helfen: AFAIR macht paintComponent bei einem JPanel genau das, was hier fehlen könnte, nämlich den Hintergrund zeichnen...
 

P@u1

Aktives Mitglied
Danke für den Tipp, ich werds am Montag mal austesten.
Aber eigentlich müsste das doch trotzdem gezeichnet werden, weil das textfeld selbst und die form doch auch repaint aufrufen, oder wird das repaint der form im repaint vom panel aufgerufen oder so?
Und es klappt ja auch meistens, nur in Ausnahmefällen nicht.
Und das andere Problem mit den neugezeichneten Sachen die verschwinden ist damit auch nicht wirklich erklärbar.
Aber trotzdem danke, ich testes einfach mal aus und guck, obs was bringt.
 

P@u1

Aktives Mitglied
komischerweise führt das Hinzufügen der Zeile
Java:
 super.paintComponent(g);
dazu, dass der schwarze Hintergrund überhaupt nicht mehr gezeichnet wird.
Wie kann das sein, was kann ich jetzt tun?
 

Raziell

Bekanntes Mitglied
Hi,
ich kann zwar nichts genaues zu deinem Problem sagen, aber mein Tipp wäre,
zeichne doch einfach den Text mit g.drawString() in paintComponent
und lasse die JTextArea komplett weg.
 

Marco13

Top Contributor
Hm. Das sollte ja nicht nötig sein. Mit einem
Java:
g.setColor(getBackground());
g.fillRect(0,0,getWidth(),getHeight());
könnte es gehen, aber das sollte eigentlich auch nicht nötig sein. Am besten wäre wohl ein KSKB.
 

P@u1

Aktives Mitglied
ich krieg es leider nicht in einem neuen kurzen programm reproduziert.
Aber zunächst versuche ich jetzt zu versthehen, warum ohne die Zeile
Java:
 super.paintComponent(g);
der Hintergrund ohne Probleme neu gezeichnet wird, aber mit der Zeile der Hintergrund auf Standard (grau) bleibt.
Hat dazu jemand eine Idee?

Edit:

Ich habe gerade rausgefunden, dass der Panel bei mir opaque aktiviert hat, also durchsichtig ist.
Stelle ich das auf false, ist auch der Hintergrund grau und nicht schwarz, obwohl ich
Java:
panel.setBackGround(Color.black);
gemacht habe.
Was mache ich falsch?

Edit2: Habe jetzt mal ein KSKB hochgeladen, an dem man sehen kann, dass das mit dem Hintergrund nicht richtig funktioniert.
 

Anhänge

  • Main.java
    1,9 KB · Aufrufe: 5
Zuletzt bearbeitet:

Marco13

Top Contributor
Opaque heißt opak, und ist das Gegenteil von Transparent. Also opaque=true passt schon, dann sollte er den Hintergrund zeichnen. An dem KSKB kann ich abgesehen davon keinen Fehler sehen. Ggf. auch mal die TextArea auf opaque setzen.
 

P@u1

Aktives Mitglied
Ich hab mal nen bischen die reihenfolgen verändert wie die sachen hinzugefügt wurden und noch nen paar sachen gemacht, ich weiß jetzt leider nicht woran genau es lag.
Und jetzt funktioniert das neuzeichen auch, wenn ich super.paintcomponent benutze und das Problem mit dem weißen Viereck ist seitdem nicht mehr aufgetreten.
Das andere Problem, dass das neuzeichen nicht immer 100% klappt ist leider immer noch da, aber ich hab mir mal was überlegt, was evtl. helfen kann, ich teste das dann erstmal aus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
RedEagle Swing JTextArea ist leer AWT, Swing, JavaFX & SWT 13
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
ralfb1105 jTextArea Scrollbar hinzufügen - mit Jigloo erstellt AWT, Swing, JavaFX & SWT 7
S Ausgabe in JTextArea AWT, Swing, JavaFX & SWT 13
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
F 2D-Grafik JTextArea drucken bringt mieses Ergebnis AWT, Swing, JavaFX & SWT 2
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Bluedaishi JtextArea AWT, Swing, JavaFX & SWT 6
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
F JTextarea Steuern ~ consolenanbindung AWT, Swing, JavaFX & SWT 5
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
F JTextArea hat keinen Rahmen AWT, Swing, JavaFX & SWT 10
N JTextArea Events weiterleiten AWT, Swing, JavaFX & SWT 3
R JTextArea mit verschiedenen Textfarben AWT, Swing, JavaFX & SWT 6
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
HoloYoitsu jTextArea.setCaretPosition(); What am I doing wrong? AWT, Swing, JavaFX & SWT 0
S Zeilenumbruch jTextArea mit toString AWT, Swing, JavaFX & SWT 2
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
M JTextArea - Leertaste "sperren" AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
M Swing JTextArea mit ScrollBar AWT, Swing, JavaFX & SWT 9
S Swing Zahl der Zeilenumbrüche in einer JTextArea bestimmen AWT, Swing, JavaFX & SWT 1
F Swing Caret in JTextArea vergrößern AWT, Swing, JavaFX & SWT 2
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
N JFrame änliches wie JTextArea? AWT, Swing, JavaFX & SWT 2
A Swing JTextArea - Multi-Line-Editing AWT, Swing, JavaFX & SWT 2
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
O JTextArea befüllen AWT, Swing, JavaFX & SWT 2
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T Swing Ausgabe aus ArrayList in Klasse1 in jTextArea in Klasse2 AWT, Swing, JavaFX & SWT 2
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
B Drucken der JTextArea AWT, Swing, JavaFX & SWT 4
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
Hoppelmann Swing Tasten in JTextArea blockieren AWT, Swing, JavaFX & SWT 2
S JTextArea Tastaturanschläge AWT, Swing, JavaFX & SWT 2
E Swing JTextArea in JFrame, wie nun WindowFocusListener implementieren? AWT, Swing, JavaFX & SWT 2
S Problem mit JButton und JTextArea AWT, Swing, JavaFX & SWT 2
J Swing Mitwachsende JTextArea+ JPanel AWT, Swing, JavaFX & SWT 4
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
M Probleme mit der Selektion einer JTextArea AWT, Swing, JavaFX & SWT 3
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
hdi Swing ListCellRenderer + JTextArea + LineWrap AWT, Swing, JavaFX & SWT 6
T ComponentOrientation in JTextArea AWT, Swing, JavaFX & SWT 3
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
L JTextArea mit JScrollPane AWT, Swing, JavaFX & SWT 7
padde479 Swing replace JTextArea funktioniert nicht AWT, Swing, JavaFX & SWT 2
L Zeilenumbrüche aus JTextArea MIT in Textdatei schreiben AWT, Swing, JavaFX & SWT 4
_dp jTextArea/jTextPanel Auto Höhe AWT, Swing, JavaFX & SWT 5
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
P Datenelement anderer Klasse in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
P Scrollbar JTextArea AWT, Swing, JavaFX & SWT 23
M Swing Ausgabe in JTextArea verzögern AWT, Swing, JavaFX & SWT 7
S System.out in JTextArea AWT, Swing, JavaFX & SWT 4
S Swing JTextArea - Bild auf/ab Tasten implementieren AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
VfL_Freak "setAccelerator/KeyStroke" bei JTextArea ? AWT, Swing, JavaFX & SWT 6
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
G Swing JTable und JTextArea synchronisieren AWT, Swing, JavaFX & SWT 2
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
M JTextArea AWT, Swing, JavaFX & SWT 2
E Swing JTextArea Alternative? AWT, Swing, JavaFX & SWT 5
A Swing JTextArea über Frame hinaus anzeigen? AWT, Swing, JavaFX & SWT 2
S JInternalFrame oder JTextArea neu laden AWT, Swing, JavaFX & SWT 2
N JTextArea.setLineWrap Bug? AWT, Swing, JavaFX & SWT 3
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
I JTextArea mit Copy Paste Funktion AWT, Swing, JavaFX & SWT 7
M Swing JTextArea größe anpassen & setBackground liefer Nullpointer AWT, Swing, JavaFX & SWT 4
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C JTextField und JTextArea - Verständnisproblem AWT, Swing, JavaFX & SWT 14
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
F new Line in JTextarea AWT, Swing, JavaFX & SWT 15
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
J Beliebtes Problem: Scrollbar in JTextArea AWT, Swing, JavaFX & SWT 4
w0ddes Swing JTextArea auf JScrollPane - Autoscroll?! AWT, Swing, JavaFX & SWT 2
Developer_X Swing Java JTextArea auto scroll down AWT, Swing, JavaFX & SWT 6
T Swing JTextArea, JTextPane, JEditorPane...Unterschied?! AWT, Swing, JavaFX & SWT 3
F Swing String Array mit JTextArea anzeigen AWT, Swing, JavaFX & SWT 13
B ArrayList im JTextArea anzeigen lassen AWT, Swing, JavaFX & SWT 30

Ähnliche Java Themen

Neue Themen


Oben