Announcement

Collapse
No announcement yet.

Problem eines Anfängers...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem eines Anfängers...

    Hallo zusammen.

    Folgendes Problem:

    Lese Daten aus DB-Tabelle aus. Für jede Spalte wird ein Label mit dem Bezeichner und ein Textfeld erstellt. Den Labels und den Textfeldern
    werden keine explizieten Namen vergeben.
    Um auf diese Komponenten zugreifen zu können, speicher ich alle Komponenten eines Panels mit
    'getComponents" in einen Component-Array.
    Meine Frage:

    Wie kann ich jetzt z.B. mit der Methode 'setText' auf diese Komponenten zugreifen.
    Hatte eigentlich gedacht, dass das mit einem Cast getan wäre, aber die Sache scheint doch schwieriger als erwartet.

    Vielen Dank im Voraus für evtl. eingehende Vorschläge! :-)

    Daniel

  • #2
    Hi Daniel,
    entschuldige, aber ich verstehe Dein Problem nicht. Warum tut es ein Cast nicht. Ich z.B speichere ab und zu mal Komponenten in einem Vector (also im Prinzip als Objects) zum Beispiel in meinem letzten Projekt JButtons. Wenn ich später z.B. den zweiten Button aus dem Vector haben will schreibe ich:

    JButton button = (JButton) vector.get(1);

    und das wuppt ausgezeichnet.
    Du müsstest nun dasselbe mit deinem Array machen. Sagen wir der zweite Eintrag in Deinem Array (wir nennen es mal components) ist ein JLabel dann müsstest Du folgendes schreiben:

    JLabel label = (JLabel) components[1];

    Das müsste bestens klappen.

    Hoffe ich konnte Dir helfen. Ansonsten schildere Dein Problem nochmal anders.

    Gruss

    Jürge

    Comment


    • #3
      ...ach ja, ich hatte was vergessen:

      Wenn Du Dir sicher bist, dass z.B. die zweite Komponente im Array ein JLabel ist, und Du willst ohne zusätzliche benannte Variable (irgendwas hast Du gegen benannte Variablen ;-) den Text des Labels setzen geht das so:

      ((JLabel) components[1]).setText("Das ist der Labeltext");

      Viel Spass

      Jürge

      Comment


      • #4
        Hallo Juergen,

        erst einmal vielen Dank!
        Aber genau so hab ich das probiert.
        Um die Situation etwas zu verdeutlich, hier der Code, den ich geschrieben habe:

        /*
        int anzahlFelder = unten.getComponentCount();
        Component[] feldListe = new Component[anzahlFelder];
        feldListe = unten.getComponents();
        ((JTextField)feldListe[2].setText("Daniel"));
        */

        unten ist in diesem Fall ein JPanel, auf dem die Label und Textfields abgelegt werden. Ich würde ja die einzelnen Textfelder benennen, da ich aber nie genau weiss, wieviele Spalten in der DB-Tabelle stehen, hab ich den Code so geschrieben:

        /*
        for (int j = 0; j < zaehler; j++){
        JLabel label = createLabel(columnNames[j]);
        JTextField textf = createTextField();
        unten.add(label);
        unten.add(textf);
        }

        private static JTextField createTextField(){
        JTextField field = new JTextField(30);
        field.setHorizontalAlignment(JTextField.CENTER);

        return field;
        }
        */

        Vielleicht gehe ich die Sache ja auch einfach nur falsch an. ;-)
        Wuerde mich ueber weitere Anregungen riesig freuen.
        Wie gesagt, bin ich ein absoluter Rookie in der Java-Programmierung.

        Danie

        Comment


        • #5
          Hi Daniel,
          jeder von uns hat mal angefangen, also deswegen keinen Kopf machen ;-)

          Ok, könntest Du mir vielleicht mitteilen wo der Compiler meckert (tut er das, oder funkt Dein Prog nur nicht so wie Du es willst) und mir vielleicht die Fehlermeldung mitteilen, weil ich in Deinem Code schlichtweg keinen Fehler finden kann. Vielleicht bin ich auch einfach nur blind. Ich habe sowas, was Du machst lange nicht mehr gemacht.

          So, und nun noch eine Sache: Warum machst Du es Dir derat schwer mit Deiner Komponentenliste. Ich meine (ist Geschmackssache), dass Du statt ein Array zu nehmern, festzustellen wieviele Komponenten Dein Panel enthält, und dann ein passendes Array zu konstruieren folgendes machen könntest:

          Bevor Du Deine Komponenten erzeugst legst Du ein java.util.Vector-Objekt an. Wenn Du dann Deine Komponenten erzeugst, hängst Du sie nach der Erstellung mit vector.add(komponente) in den Vektor ein. Der Vektor wächst dynamisch mit jedem Element das Du einhängst. Später kannst Du dann mit vector.get(index) die gewünschte Komponente wieder ermitteln. Ist das ein Vorschlag ? Wenn Dein Projekt grösser werden sollte lohnt es sich auch darüber nachzudenken ob Du nicht ein Model-View-Controller-Paradigma verwendest. Dann unterlaufen Dir auch nicht so leicht Fehler, z.B. dass Du ein Label mit einem Textfeld verwechselst oder anderweitig durcheinander kommst. Ich weiss nicht ob Du Dich mit JTable oder JComboBox auskennst, wenn ja sollte Dir das Konzept bekannt vorkommen. Du würdest in diesem Falle Dein unten-Panel mit einem Datenmodel (musst Du selbst 'erfinden') versehen, das die Datensicht deines Panels, sprich die zu verwaltende Komponentenliste darstellt.

          Ich hoffe nun ich habe Dich mit diesem Infoschwall nicht überfordert. Falls Du mich ausserhalb des Forums erreichen willst schreib mal an [email protected], dann können wir weitere Info austauschen.

          Bis in Bälde und lass dich nich entmutigen

          Jürge

          Comment

          Working...
          X