PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Label in Canvas anzeigen



bischi
30-04-2003, 16:59
Ich habe eine Klasse von java.awt.Canvas abgeleitet, in der ich Bilder (+Animationen) anzeigen will. Ich bringe es aber nicht fertig, in dieser Klasse auch Text anzuzeigen. Gibt es irgendeine Möglichkeit, ein Label (oder etwas anderes, das HTML-Tags versteht) in einem Canvas anzuzeigen und wenn nicht (was ich befürchte), wie muss ich es dann machen, so dass ich in einem Swing-Programm eine Animation (in einem Canvas nach Möglichkeit, da dieser schon besteht) und anschliessend am selben Ort auf dem Bildschirm HTML-formatierten Text anzuzeigen?

Bin für jede Hilfe dankbar Bischi

anda_skoa
01-05-2003, 08:37
Meine Idee wäre, folgendes zu probieren.

In der paint Methode der Canvas transformierts du das Graphisc Object so, dass 0,0 dort liegt, wo das Label anfangen soll.
Dann übergibts du es an paint des Labels.
Anschliessend transformierts du zurück.

Ciao,
_

bischi
01-05-2003, 11:47
Gehts noch komplizierter? Danke trotzdem, doch ich habe das Problem anderwertig gelöst: unter den Canvas lege ich ein Label. Mit setVisible(Boolean) der Klasse Canvas kann ich diesen einfach ausblenden, sodass ich meinen Text im Label anzeigen kann.

MfG Bischi

anda_skoa
01-05-2003, 13:35
Original geschrieben von bischi
Gehts noch komplizierter?


Auf diese Weise funktionieren glaub ich auch die TableCellRenderer in Swing.



Danke trotzdem, doch ich habe das Problem anderwertig gelöst: unter den Canvas lege ich ein Label. Mit setVisible(Boolean) der Klasse Canvas kann ich diesen einfach ausblenden, sodass ich meinen Text im Label anzeigen kann.


Hmm, dann kannst du dn Text aber nicht über etwas drüber zeichnen, oder?

Ciao,
_

bischi
01-05-2003, 15:56
Hmm, dann kannst du dn Text aber nicht über etwas drüber zeichnen, oder? Hatte ich ehrlich gesagt auch nicht vorgehabt! Kannst du mir aber, für den Fall, dass ich dies trotzdem noch vorhätte, erklären, wie ich deine Anweisungen im Detail zu vollziehen habe (hab deine Grundsatz-Idee verstanden, weiss jedoch nicht, wie ich dies programmieren soll :D ).

MfG Bischi

anda_skoa
01-05-2003, 18:28
Nicht getestet!



public class MyCanvas extends java.awt.Canvas
{
protected JLabel m_label = new JLabel("testtext");

public void paint(Graphics g)
{
//draw background

// save clip rectangle
Rectangle clip = g.getClipBounds();

// draw label at 100,50
g.translate(100, 50);
m_label.paint(g);

// translate back
g.translate(-100, -50);

// restore clip rect
g.setClip(clip);
}
}


Ciao,
_

bischi
01-05-2003, 18:48
Versuchs mal, danke.

peschmae
02-05-2003, 10:56
was spricht hier gegen die verwendung von update(g) anstelle von paint(g), wie es die APIdoc nahelegt?

MfG Peschmä

anda_skoa
02-05-2003, 11:51
Original geschrieben von peschmae
was spricht hier gegen die verwendung von update(g) anstelle von paint(g), wie es die APIdoc nahelegt?

MfG Peschmä

Nun ja, ich hab da gestern in meiner 1.3.1 API doc bei update() folgendes gelesen:



- Clears this component by filling it with the background color.
- Sets the color of the graphics context to be the foreground color of this component.
- Calls this component's paint method to completely redraw this component.


Den ersten Punkt (löschen des Hintergrundes) will ich ja vermeiden.

Hab gerade nachgesehen, in der 1.4er Doku steht das nicht mehr.

Weiß jemand, ob das vorher falsch beschrieben war, ob es jetzt einfahc nicht mehr drinnen steht, oder ob sich das Verhalten geändert hat?

Ciao,
_

peschmae
02-05-2003, 13:13
naja, bei 1.4.1 steht:


update

public void update(Graphics_g)

Calls paint. Doesn't clear the background but see ComponentUI.update, which is called by paintComponent.


MfG Peschmä