Bei drawString() wird nicht gezeichnet

Status
Nicht offen für weitere Antworten.

marvin42

Mitglied
Hi Leute,

ich schreib gerade ein kleines Grafik-Programm, in dem man unter anderem auch Strings zeichnen kann (also in einer JTextArea Text eingeben, der wird dann in einer ArrayList gespeichert und mit drawString in ein Canvas gezeichnet).

Mein Problem ist, dass, wenn ich das Fenster maximiere, die Strings, die in der ArrayList gespeichert sind, nicht gezeichnet werden.

Ich habe probeweise auch ein Oval in dieselbe Funktion geschrieben, in der auch der String gezeichnet werden solte. Das wird ja auch gezeichnet.

Ich lasse mir ebenfalls die Daten aus der ArrayList über System.out.println() mitprotokollieren; es sind immer die richtigen Daten, es werden immer die richtigen Funktionen aufgerufen. Nur der drawString()-Befehl wird offensichtlich nicht aufgerufen.

Programmfragmente:

Aus paint() in Canvas:

Code:
if(!textObjekte.isEmpty())          // textObjekte: ArrayList mit von JTextArea abgeleiteter Klasse
		{
			int b = 0;
			System.out.println("In DrawArea.paint() - textObjekte");
			
			for(Textfeld t : textObjekte)
			{
                                b++;
				System.out.println(b + " DrawArea.paint() -> Textfeld");
			//	g.setColor(t.getColor());
				t.displayText(getGraphics());           
			}
		}

displayText in von JTextArea abgeleiteten Klasse:

Code:
	public void displayText(Graphics g)
	{
		color = g.getColor();
		System.out.println("In displayText");
		
		g.setFont(new Font(fontName, Font.BOLD, size));	
	
		g.setColor(Color.BLACK);
		g.drawString(text, (int)location.getX(), (int)location.getY()); // Wird nach Fenster maximieren und wieder-
                                                                                                      // herstellen NICHT gezeichnet!
		g.drawOval(50, 50, 50, 50);                                   // Wird bei Fenster maximieren und wiederherstellen
                                                                                           // gezeichnet!
		System.out.println("Textlänge: " + text.length() + text + " " + location.getX() + " " + location.getY());
	}


Wie gesagt sind die Daten von location (Point) und text (String) völlig in Ordnung, nur drawString() will nicht so recht.
Ich bin hier völlig ratlos und hoffe, ihr könnt mir weiterhelfen. :)

PS: Während das Fenster auf einer Größe (egal, ob Startgröße oder Maximalgröße) ist, funktioniert das Stringzeichen.
 

André Uhres

Top Contributor
marvin42 hat gesagt.:
..Wie gesagt sind die Daten von location (Point) und text (String) völlig in Ordnung, nur drawString() will nicht so recht..
Naja, wenn drawString nicht mehr will, dann können wir wohl Java wegschmeissen :shock:
Ich bin mir fast sicher, daß deine location dir einen Streich spielt.
 

marvin42

Mitglied
Nein, das hier wird in der Konsole ausgegeben, sobald ich "versuch" in dem fenster in normalgröße geschrieben hab (was ja funktioniert):

1 DrawArea.paint() -> Textfeld
In displayText - Schriftart: Monospaced
Textlänge: 7versuch 252.0 193.0

Die letzten beiden Zahlen stehen eben für die gespeicherten x- bzw. y-Koordinaten.
Und das Oval wird mit den location-Werten auch richtig gezeichnet.

Irgendwie steig ich da nicht dahinter. ???:L
 

André Uhres

Top Contributor
Code:
/*
 * TextZeichnenDemo.java
 */
package text;
import java.awt.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
public class TextZeichnenDemo extends JFrame {
    public TextZeichnenDemo() {
        super("Text Zeichnen Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        add(new MeinPanel());
    }
    public static void main(String args[]) {new TextZeichnenDemo().setVisible(true);}
}
class MeinPanel extends JPanel{
    private List<Textfeld> textObjekte = new ArrayList();{
        textObjekte.add(new Textfeld());
    }
    public void paintComponent(final Graphics g){
        super.paintComponent(g);
        if(!textObjekte.isEmpty()){
            for(Textfeld t : textObjekte) {
                t.displayText(g);
            }
        }
    }
}
class Textfeld extends JTextArea{
    private Point location= new Point(100,100);
    private String text = "bla bla";
    public void displayText(final Graphics g) {
        g.drawString(text, (int)location.getX(), (int)location.getY());
    }
}
 

marvin42

Mitglied
@André: Danke, aber das Problem ist nicht, dass das Text"zeichnen" überhaupt nicht funktioniert, sondern nur dann nicht, wenn paint() in der von Canvas abgeleiteten Klasse aufgerufen wird.

Dann werden die richtigen Funktionen mit den richtigen Werten aufgerufen, aber der String wird trotzdem nicht gezeichnet.

Wenn dagegen update() in der von Canvas abgel. Klasse aufgerufen wird, funktioniert das Stringzeichnen.


Was mich so verwirrt: Der Text wird über println() ausgegeben und stimmt. Und ich zeichne ein Oval mit den location-Daten, die auch für drawString() verwendet werden. Dieses Oval wird nach Fenster-Maximieren gezeichnet, der String nicht.
 

Wildcard

Top Contributor
Es ist nicht deine Aufgabe die Zeichenmethoden aufzurufen, das macht nur AWT. Vergiss den getGraphics Kram direkt wieder.
Eine Frage in eigenem Interesse:
Ich sehe hier beinahe täglich Leute die falsch (d.h. mit getGraphics) zeichnen.
Wie kommst du darauf das zu benutzen?
Steht das in irgendeinem misratenen Tutorial? ???:L
Wenn ja, in welchem?
 

marvin42

Mitglied
Meinst du in paint?
Gut, das getGraphics() ist überflüssig, da paint ja eh Graphics als Parameter bekommt.
Aber irgendwie muss ich doch die Textfelder zeichnen. Wie würdest du es denn machen?
 

Wildcard

Top Contributor
Unter der Prämisse das dir jetzt bekannt ist das du selbst keine Methode zum Zeichnen aufrufen darfst:
Was ist jetzt das Problem?
 

marvin42

Mitglied
Das Problem ist, dass, sobald ich das Fenster maximiere, die Inhalte der in einer ArrayList gespeicherten Textfelder nicht gezeichnet werden.

Nur: Ich zeichne in displayText() ein Oval mit den location-Werten, die auch bei drawString verwendet werden - und das Oval wird auch gezeichnet, sobald das Fenster maximiert wird. An den location-Werten kann es also nicht liegen.

Außerdem lasse die Werte der Strings in den Textfeldern in der Konsole ausgeben, und die stimmen auch - daran liegt es offenbar auch nicht.

Und jetzt hab ich keine Ahnung, warum mit drawString kein Text gezeichnet wird.
 

marvin42

Mitglied
Hat sich erledigt.

Das Problem war, dass ich in die ArrayList immer so gespeichert hab:

Code:
t.add(new Textfeld(currentTextfeld));

Und im Copy-Konstruktor von Textfeld hatte ich unter anderem folgendes stehen:

Code:
size = 0;

statt

Code:
size = t.size;

wobei t das Textfeld ist, das der Copy-Konstruktor als Argument erhält.

Danke für die Hilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
G drawString/ JLabel updaten Java Basics - Anfänger-Themen 1
D For Schleife und DrawString - Problem Java Basics - Anfänger-Themen 20
P drawString() - Fehler Java Basics - Anfänger-Themen 4
B mit drawString direkt zeichnen, aber wie das Ende finden? Java Basics - Anfänger-Themen 3
L drawString flimmert beim Überzeichnen Java Basics - Anfänger-Themen 5
A GregorianCalendar -Darstellung mit drawString Java Basics - Anfänger-Themen 3
G g.drawString(str, x, y); Schriftgröße? Java Basics - Anfänger-Themen 2
H drawString Java Basics - Anfänger-Themen 4
P Graphics2D.drawString: Zahlen rechtsbündig ausrichten? Java Basics - Anfänger-Themen 2
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
kodela Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 3
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
H Wie wird ein String intern gespeichert? Java Basics - Anfänger-Themen 10
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
S setContentView(R.Layout.XXX) wird Rot angezeigt Java Basics - Anfänger-Themen 0
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben