.add bemerken?

Status
Nicht offen für weitere Antworten.

Calamitous

Bekanntes Mitglied
hallo!
habe folgendes Problem:
Ein JPanel soll eine eigens geschriebene Komponente hinzufügen (genau gesagt ein JLabel, allerdings vererbt). klappt wunderbar. Nun soll die komponente jedoch "merken" wenn sie geadded wird und eine Funktion aufrufen.
soll dann zB so aussehen...
Code:
//eigene Komponente
class Hallo extends JLabel
{
.....
  private void bingeAddedworden()
 {
   .....
 }

}

nun in einer Methode...
jPanelX.add(hallo1);
???:L
irgendwelche gute ideen?
 
B

Beni

Gast
Da fällt mir nicht allzuviel gutes ein, wie wäre es damit: ?
Eine eigene Klasse schreiben, die von JPanel erbt, und add überschreibt. Die ruft dann die entsprechende Methode auf.

mfg Beni
 

René Link

Aktives Mitglied
Beni hat gesagt.:
Da fällt mir nicht allzuviel gutes ein, wie wäre es damit: ?
Eine eigene Klasse schreiben, die von JPanel erbt, und add überschreibt. Die ruft dann die entsprechende Methode auf.

mfg Beni

Schlechte Idee. Man bekommt dadurch eine zu starke Kopplung zwischen den Klassen. Man sollte ein allgemeineres Interface benutzen.

Benutze einfach das ContainerListener-Interface. Das musst du in deinem spezielles Label implementieren.
Dann das Label dem JPanel als ContainerListener hinzufügen. Schon wird dein Label benachrichtigt, wenn es
hinzugefügt oder entfernt wird. Du kannst dann im Label auf diese Ereignisse reagieren.

Ein Controller, der zur einen Seite hin ein ContainerListener-Interface hat und zur anderen Seite ein von dir definiertes Interface implementiert, wäre auch eine Lösung. Außerdem könntest du mit Reflection arbeiten.

Zum ersten Vorschlag habe ich dir hier ein kleines Beispiel gemacht.

Code:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class AddTest {
  public static void main(String[] args) {
    SpecialLabel sl = new SpecialLabel();
    sl.setText("Ein Label");

    JFrame frame = new JFrame("Ein Titel");
    frame.setSize(640, 480);

    Container content = frame.getContentPane();
    content.addContainerListener(sl);
    content.add(sl);

    frame.show();
  }
}



class SpecialLabel extends JLabel implements ContainerListener {

  public void componentAdded(ContainerEvent e) {
    System.out.println("Bin hinzugefügt wordem -> " + e.getSource());
  }

  public void componentRemoved(ContainerEvent e) {
  }

}
 
G

Guest

Gast
herzlichen dank!
das nenn ich ne gute Anleitung
-"implements ContainerListener" leicht gemacht :)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben