GC zeichnet nicht richtig

T

Tobias Köhler

Guten Morgen.
Ich habe mir eine Panel für SWT gebastelt. Diese ist so aufgebaut, dass es eine HeadLine und einen InfoText gibt. Die Methode für setInfoText(String) sieht so aus:
Java:
public void setInfoText(String infoText)
{	
	Font fontText = new Font(Display.getCurrent(), "Tahoma", 8, SWT.NONE);
        gc.setFont(fontText);
        gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));	
        gc.setBackground(new Color(Display.getCurrent(), 255, 255, 255));
        gc.drawString(infoText, 10, 25);
        fontText.dispose();
}
So, das Problem ist jetzt folgendes: Wenn ich die Panel initialisiere und setInfoText aufrufe, wird kein Text geschrieben. Klick ich danach aber den Button an, auf dem der Text gewechselt werden soll, funktioniert es. Woran liegt das?
PS: Gibt es eine Möglichkeit einen Zeilenumbruch zu "zeichnen"?
 
hmm, da hab ich erst mal ne frage: "gc" ist das ein Graphic Objekt?
Und wo rufst du die Methode das erste mal auf?
 
ja, gc ist ein GC;)
Hier der erste Aufruf:
Java:
panel = new Panel(wizard, SWT.NONE);
panel.setBounds(0, 0, WIZARD_WIDTH, 75);
panel.setInfoText("Klicken Sie auf das Fragezeichen für weitere Informationen zu dieser Option.");

Im Constructor steht:
Java:
public Panel(Shell shell, int option)
{
	cv = new Canvas(shell, option);
	gc = new GC(cv);
	cv.setBackground(new Color(Display.getCurrent(), 255, 255, 255));
}
 
Ok, SWT ist zwar weniger meine Welt, aber schau mal dass du die Methode erst aufrufst, wenn das Fenster/Panel schon auf dem Bildschirm zu sehen ist (show())
 
Klappt dennoch nicht. Nun habe ich die Shell geöffnet, erzeuge erst dann die Widgets und setze die Listener, Inhalte etc. Ergebnis bleibt aber beim Alten.
Komisch, weiß nicht woran das liegen könnte - zu Beginn hat es noch geklappt... Nur dumemrweise weiß ich nicht mehr was ich denn nun genau geändert habe, sodass es nicht mehr klappt.
 
Sicher dass die Methode auch ausgeführt wird? Wenn ja, mache danach vieleicht mal einen repaint() wenn es das bei SWT gibt. Ansonsten kann ich dir leider nicht helfen :(
 
Ja, ganz sicher, dass sie aufgerufen wird;) Ich habe aber jetzt einen Teil schon hinbekommen.
Mit update() wird es wenigstens angezeigt, nur leider kommt "rechts" des neu gezeichneten Textes noch der Rest des alten Textes zum Vorschein, wenn dieser länger war als der neu gezeichnete.... Verständlich? ^^
 
Yo, du musst am besten jedes mal bevor du neu Zeichnest ersteinmal den alten Bereich löschen (mit der Grundfrabe überzeichnen). Du kannst z.b. eine Methode schreiben die dies macht und diese dann jedes mal in deiner Zeichenmethode aufrufen.
 
Ich verstehs nicht;)
Java:
public void setInfoText(String infoText)
{	
	updatePanel();
	Font fontText = new Font(Display.getCurrent(), "Tahoma", 8, SWT.BOLD);
        gc.setFont(fontText);
        gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));	
        gc.setBackground(new Color(Display.getCurrent(), 255, 255, 255));
        gc.drawString(infoText, 10, 35);
        fontText.dispose();
        cv.update();
}
	
private void updatePanel()
{	gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));	
        gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
        gc.drawRectangle(0, 30, width, height);
        cv.update();
}

das sollte eigentlich den Bereich übermalen, der das Label enthält. Dennoch bleibt der Rest des alten Textes vorhanden?
 
Zurück