Announcement

Collapse
No announcement yet.

Objekte dynamisch einfügen ?

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

  • Objekte dynamisch einfügen ?

    Hallo zusammen !

    kann mir jemand erklären, wie man Objekte dynamisch erstellen kann ?
    so soll zur Laufzeit des Programms z.b. bei jedem Knopfdruck ein neues label angelegt werden

    vielen Dank

    Rober

  • #2
    Hallo,

    irgendwie verstehe ich Dein Problem nicht. Ich nehme mal an, dass Du mit einem IDE zur visuellen Erstellung von Benutzeroberflächen arbeitest, denn sonst ergäbe Deine Frage wenig Sinn ;-)
    Es ist doch sooo einfach. Nehmen wir mal an,Du hast eine Behandlungsmethode für den Klick auf den Button, die buttonClicked() heisst. Diese würde dann so aussehen:

    public void buttonClicked()

    {

    JLabel newLabel = new JLabel();

    }

    ... so und das wars bereits, oder hbe ich Deine Frage schlichtweg falsch verstanden.

    Gruss

    Jürge

    Comment


    • #3
      Guten Morgen,
      also sooo einfach ist es nun auch wieder nicht wie du das schilderst und zudem unvollständig! (1)Beim obigen Konstrukt
      wird das Label definitv nicht auf dem Bildschirm erscheinen.

      (2) weiterhin kommt es darauf an welches Layout gesetzt ist:
      ist das null Layout gesetzt muss mit setBounds die Dimension und Position auf dem Bildschirm gesetzt werden. Gibt es bereits mehrere
      Komponenten, dann geht die Rechnerei schon los...

      Bei den anderen Layouts ist halt auch zu berücksichtigen wo im Container die neue Komponente erscheinen soll.

      Beispiel für ein null Layout:

      Hinweis: contentPane ist der Container in dem die Komponente dargestellt werden soll.
      <pre>
      public void actionPerformed(ActionEvent e)
      {
      JLabel label = new JLabel("Test");
      label.setBounds(50,50,100,21);
      contentPane.add(label);
      repaint();
      }
      </pre>

      soooo geht das :-)

      Thoma

      Comment


      • #4
        Lieber Thomas,

        ich schätze Deine Beiträge sehr, aber bitte... Du hättest doch auch sehen müssen, das ich lediglich den Vorgang des Einfüges beschreiben wollte. Natürlich positioniert man die Komponente und ruft VIELLEICHT setBounds() auf. Diesen, wie auch den Aufruf von repaint() kann man aber meiner bescheidenen Meinung nach weglassen, weil

        a.) ein Label bereits eine definierte Grösse hat (aufgrund des darin enthaltenen Texts und dessen Abmesssungen. Also ein Label wird niemals (soweit es Text oder ein Icon enthält auf dem Bildschirm zusammengestaucht erscheinen, so wie das z.B. bei einem JTextField passiert, wenn man nicht explizit die Grösse angibt.

        b.) ich hatte es noch nie nötig (verwende ich ein "Spezial-JDK' ;-) nach den Einfügen einer Komponente repaint() aufzurufen. Das ist komisch.

        Ok, nix für ungut, aber wenn wir es so sehen wie Du, ist auch Dein Beispiel unvollständig, denn Du hast vergessen, dass es ja einen übergeordneten Container geben muss, der in Deinem Programmbeispiel nirgendwo erscheint. Wenn wir hier in Zukunft KOMPLETTE Java-Klassen als Beispiele ins Forum posten wollen, nur um auch wirklich nichts zu vergessen, wird das eine ziemliche Tipperei und die Beiträge werden kaum noch nachzuvollziehen sein.

        Ich bitte Dich bereits zu diesem Zeitpunkt vielmals um Entschuldigung für den etwas zynischen Ton dieses Beitrags, aber ich wollte mir um 3:06 Uhr NACHTS nicht die Mühe machen ein Komplettbeispiel zu posten, weil ich annahm, das der Fragesteller lediglich wissen wollte wie man Objekte zur Laufzeit erzeugt, was ja auch schliesslich in der Titelzeile steht.

        Also vergib mir bitte meine fehlende Perfektion.

        Gruss

        Jürge

        Comment


        • #5
          Hallo,

          mein Beispiel ist komplett, da ich explizit auf das null Layout verwiesen habe. Weiterhin habe ich
          darunter hingewiesen welche Funktion contentPane innehat.

          Bei diesen Voraussetzungen ist Punkt a.) nunmal falsch da JLabel bzw JTextField trotz Inhalt
          keine Ausdehnung besitzen und deshalb auch nicht dargestellt werden.

          Punkt b.) ist u.U korrekt, da nach einem Einfügen in einen Container implizit repaint() und revalidate() aufgerufen wird.
          Explizites aufrufen schadet jedoch nicht, da 1) sichergestellt wird dass ein Neuzeichnen angestossen wird,
          2) bei mehrfachen Aufrufen von repaint() diese ohnehin zu einem Aufruf zusammengefasst werden.

          Thoma

          Comment


          • #6
            Hi !

            ja du hast meine Frage schlichtweg falsch verstanden .... die
            z.b. neuen label sollen zur Laufzeit des Programmes vom Benutzer
            hinzugefügt werden könnnen. Zur Zeit schreibe ich eine Tabellen
            Object f.d. jre1.1.8 - wo es ja bekanntlich kein swing und somit
            auch kein jtable gibt. Die Objecte welche hinzugefügt werden sollen
            sind die zeilen der tabelle .... Im moment habe ich das ganze so
            gelöst :

            add(new TableRow(RowName));

            class TableRow extens Panel
            {
            public TableRow(String name)
            {
            setName(name);
            }
            }

            Der name wird dabei z.b. über nen Zähler gesetzt ...

            gruß Robe

            Comment

            Working...
            X