Klasse mit Reflections adden

theuserbl

Bekanntes Mitglied
Hi!

Habe folgendes Beispielprogramm bisher:
Java:
import java.lang.reflect.*;
import javax.swing.*;

public class RefTest extends JFrame {

  public RefTest() {
    JPanel p = new JPanel();

    JButton b1 = new JButton();
    b1.setText("first Button");
    p.add(b1);

    try {
      Class cls = Class.forName("javax.swing.JButton");
      Object obj = cls.newInstance();
      Method txt = cls.getMethod("setText", String.class);
      txt.invoke(obj, "second Button");
//  an dieser Stelle sollte jetzt etwas wie p.add(cls) oder so kommen

      add(p);
    } catch (Throwable e) {
      System.out.println("**> "+e);
    }
  }

  public static void main(String[] args)
  {
    RefTest f = new RefTest();
    f.setSize(400,300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}

Aber wie füge ich nun die per Reflections erstellte Instanz einer Klasse einer herkömmlich erstellten Klasseninstanz hinzu?

Grüße
theuserbl
 
Zuletzt bearbeitet:
Habe es nun noch mal versucht, mit einer kleinen Änderung.

Aber das hier funktioniert leider auch nicht: 🙁

Java:
import java.lang.reflect.*;
import javax.swing.*;

public class RefTest extends JFrame {

  public RefTest() {
    JPanel p = new JPanel();
    JButton b1 = new JButton();
    b1.setText("first Button");
    p.add(b1);

    try {
      Class cls = Class.forName("javax.swing.JButton");
      JComponent obj = (JComponent) cls.newInstance();
      Method txt = cls.getMethod("setText", String.class);
      txt.invoke(obj, "second Button");
      add(obj);

      add(p);
    } catch (Throwable e) {
      System.out.println("**> "+e);
    }
  }

  public static void main(String[] args)
  {
    RefTest f = new RefTest();
    f.setSize(400,300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
 
ein JFrame mit Standard-BorderLayout kann nur eine Komponente in der Mitte aufnehmen,

add(p);
überschreibt also alles was vorher eingefügt wurde (also die add(obj) Zeile nutzlos),
vielleicht willst du obj eher in p einfügen?? ein JPanel hat standardmäßig FlowLayout, da dürfen es mehrere sein
 
@SlaterB: Danke.

Hatte ich in der Nacht geschrieben gehabt, kurz vorm schlafen gehen.
Da ist mir dann wohl der kleine Fehler unterlaufen, statt "p.add(obj);" bloß "add(obj);" zu schreiben.
Davor im Post ist mir ja schon der Fehler unterlaufen, eigentlich "cls" adden zu wollen.

Konnte mir nun aber auch nicht vorstellen, daß die kleine von Dir beschriebene Änderung funktioniert. Dachte da käme noch was komplizierteres auf mich zu.
War schon im Begriff etwas wie "Jaja, aber das ändert auch nichts am Problem" und so schreiben zu wollen.
Jedoch muß ich obligatorischer Weise ja erst einmal testen, ob Dein Hinweis nicht doch etwas bewirkt. Und siehe da, es hat tatsächlich funktioniert. (Vermisse hier im Forum gerade den hüpfenden Smiley, um meiner Freude ausdruck zu verleihen).
Danke. :applaus:

Grüße
theuserbl
 

Zurück
Oben