Wer ruft paintComponent() Methode auf?

Status
Nicht offen für weitere Antworten.

Froop

Mitglied
Hallo,

ich habe die Methode paintComponent() überschrieben und möchte herausfinden für welches jTextField die Mehtode jeweils aufgerufen wird, damit ich für die verschiedenen Textfelder unterschiedlich reagieren kann.



Code:
JTextField t1;
JTextField t2;

class Test extends JTextField
{
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    // hier eine mögliche Sonderbehandlung
  }
}

Vielen Dank schon einmal,
Froop
 
Wer ruft paintComponent() Methode auf?
JComponent.paintComponent(Graphics) wird in aller Regel nur von paint(Graphics) des selben Objekts aufgerufen. Was willst Du eigentlich machen?

Nachtrag:

ich habe die Methode paintComponent() überschrieben und möchte herausfinden für welches jTextField die Mehtode jeweils aufgerufen wird, damit ich für die verschiedenen Textfelder unterschiedlich reagieren kann.
Die Methode wird natürlich immer für "this" aufgerufen. 🙂 Sicher, dass Du verstanden hast, was (nicht statische) Methoden sind?

Ebenius
 
Zuletzt bearbeitet:
Ich rufe die Methode von einer anderen Klasse mit
t1.repaint()
t2.repaint()
auf und möchte herausfinden, ob die Methode für t1 oder für t2 aufgerufen wurde.
 
Gibt es so etwas wie ein

g.getIrgendetwas() was ich mit dem entsprechenden jTextField vergleichen kann?
 
Mach doch einfach bei der Initialisierung sowas [HIGHLIGHT="Java"]t1.setName("t1");
t2.setName("t2");[/HIGHLIGHT]
Und dann in der paintComponent(Graphics)-Methode [HIGHLIGHT="Java"]if ("t1".equals(getName())) {
//...
}[/HIGHLIGHT]
Aber das ganze Konzept halte ich für fragwürdig. Normaler weise lässt sich das immer anders lösen als über einen Namen oder eine Referenz zu prüfen. Für Hinweise müsste man aber mehr übder das Problem wissen. Falls Du nur eine Quick-And-Dirty-Lösung brauchst, das vorgeschlagene natürlich völlig in Ordnung.

BTW: repaint() ruft nicht paint(Graphics) und auch nicht paintComponent(Graphics) auf. Es legt lediglich einen PaintEvent in die EventQueue. Etwas später wird der Event dann vom Event Dispatcher abgearbeitet und paint(Graphics) aufgerufen. Da gibt's keine direkte Verbindung.

Ebenius
 
Danke schon einmal.
Dein Vorschlag wäre sicherlich eine Lösung, leider nicht ganz was ich suche, aber vielleicht gibt es das ja auch nicht.
 
Wer lehsen kann ich schwär im Forteil.
Ok! setName war mir bisher nicht so bekannt.

Danke für den Tipp,
Froop
 
Wer ruft paintComponent() Methode auf?
Falls jemand sein Wissen vertiefen möchte, hier noch ein paar zusätzliche Infos:

JComponent.repaint() registriert einen asynchronen repaint Antrag beim RepaintManager der Komponente, der invokeLater() benutzt, um einen Runnable entstehen zu lassen, der den Antrag später auf dem "event dispatching thread" verarbeitet.

Der Runnable wird auf dem "event dispatching thread" ausgeführt und er veranlasst den RepaintManager der Komponente, paintImmediately() auf der Komponente aufzurufen, die folgendes tut:

1. verwendet das Cliprechteck und die Eigenschaften "opaque" und "optimizedDrawingEnabled", um die 'root' Komponente festzustellen, von der aus der Malvorgang anfangen muß (um sich um Transparenz und möglicherweise überlappende Komponenten kümmern zu können).

2. ruft paint() auf der 'root' Komponente auf (was die JComponent.paint() Schritte paintComponent(), paintBorder() und paintChildren() durchführt), und verursacht so, daß alles unter dem 'root' gemalt wird, was sich mit dem Cliprechteck überschneidet.

Noch mehr Infos über die AWT und Swing Malmechanismen finden wir hier:
Malen in AWT und Swing - Byte-Welt Wiki
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben