HashMap mit JPanel

Status
Nicht offen für weitere Antworten.

TheHighlander

Mitglied
Hi.

Ich hab ein Problem und komm einfach net auf die Lösung.
Also, ich hab ne HashMap mit Vectoren. Diese Vetoren enthalten JTextFields und JLabels.

Das ganze sieht so aus ca....
Code:
   private HashMap createPanelForFrame(HashMap fields)
   {
       HashMap panels = new HashMap();   
       for (int i = 0; i < fields.size(); i++)
      {
         int x = 1, y = 2;
         int row = 1;
         boolean isAbreast = true;
         Vector temp = (Vector)fields.get(Integer.toString(i));
         if (temp != null)
         {
            JPanel panel = new JPanel(new TableLayout(size), true);
            panel.setName("Panel ID " + i);

               for (Iterator iter = temp.iterator(); iter.hasNext();)
               {
                  guiTextField element = (guiTextField)iter.next();
                  panel.add(element, x + "," + row + "," + y + "," + row);
                  row += 2;
               }
               x = 1;
               y = 1;
               
               //Und jetzt die Buttons 
               panel.add(nextElement, x++ + "," + row + "," + y++ + "," + row);
               panel.add(lastElement, x++ + "," + row + "," + y++ + "," + row);
               panel.add(firstElement, x++ + "," + row + "," + y++ + "," + row);
               panel.add(prevElement, x + "," + row + "," + y + "," + row);

               x = 1;
               y = 2;
               row++;
               panel.add(delElement, x++ + "," + row + "," + y++ + "," + row);
               panel.add(newElement, ++x + "," + row + "," + ++y + "," + row);
               panels.add(Integer.toString(i),panel);
            }
      }
   }

Das Problem ist jetzt, das nach dem ersten Durchlauf ein JPanel zwar in meiner HashMap drinnen ist, dies aber beim 2ten Durchlauf überschrieben wird. Nach dem 2ten Durchlauf funktioniert das ganze wieder.
Noch ein Problem ist, dass wenn ich mein JPanel dann in mein InternalFrame geb ich dich Buttons dann nicht sehe.
Weiß von euch jemand wo das Problem liegt?
 
Mir ist nicht so ganz klar was du damit bezweckst! Wenn du genauer beschreibst was du eigentlich machen willst bekommst du sicher eine bessere Antwort.
Code:
panels.add(panel);
Was ist denn das? Eine HashMap arbeitet mit Key/Value-Pairs. Wie soll das funktionieren? Du solltest wohl eher eine ArrayList verwenden.
TheHighlander hat gesagt.:
Noch ein Problem ist, dass wenn ich mein JPanel dann in mein InternalFrame geb ich dich Buttons dann nicht sehe.
Wie gesagt, ich weiß nicht genau was du hier eigentlich machst, also einfach mal geraten:
Du fügst die gleichen Buttons in mehrere Panels ein? Ein Button kann aber nur in einem Panel gleichzeitig sein.
 
Da gehört Key/Value hin hast du recht.


Wildcard hat gesagt.:
Wie gesagt, ich weiß nicht genau was du hier eigentlich machst, also einfach mal geraten:
Du fügst die gleichen Buttons in mehrere Panels ein? Ein Button kann aber nur in einem Panel gleichzeitig sein.

Danke für den Tipp....hilft mir sehr viel weiter.

Was ich machen will:
Ich will mir aus einer DB-Tabelle automatisch eine Eingabemaske generieren lassen.
 
so...jetzt ist das mit den Buttons geklärt, hab sie in ne ToolBar gegeben.
Ein Problem hab ich aber noch.

ich adde mein Panel und meine Toolbar zum InternalFrame.
Schalt ich jetzt ein Panel weiter wird dies erst sichtbar wenn ich das InternalFrame verschiebe.

Code:
      JPanel panel = (JPanel)panels.get(elementId);
      this.getContentPane().removeAll();
      this.getContentPane().add(navigateTools,BorderLayout.NORTH);
      this.getContentPane().add(panel);
      panel.setVisible(true);
      panel.repaint();
      this.getContentPane().repaint();

Was mach ich falsch?
 
Danke schön.

Hab noch ne Frage zu JLabels. Kann ein JLabel auch nur enmal vorkommen???
Code:
               for (Iterator iter = names.iterator(); iter.hasNext();)
               {
                  JLabel element = (JLabel)iter.next();
                  panel.add(element, x + "," + row + "," + y + "," + row);
                  row += 2;
               }

Ich erzeug mir also jedesmal ein neues JLabel.
Das Problem ist, das meine Labesl nur im letzen Panel drinnen sind das ich erzeuge. In den vorigen sind sie nicht drinnen.[/quote]
 
Alle Components sind nur einmal vorhanden.
Um sie gleichzeitig in einem anderen Panel zu haben musst du sie clonen, oder neu erstellen
 
ich mach ja eh

hier mal die ganze funktion

Code:
   private void createPanelForFrame(HashMap fields, Vector names)
   {
      for (int i = 0; i < fields.size(); i++)
      {
         int x = 1, y = 2;
         int row = 1;
         boolean isAbreast = true;
         Vector temp = (Vector)fields.get(Integer.toString(i));
         if (temp != null)
         {
            log.debug("-----------------ID---------------" + i);
            JPanel panel = new JPanel(new TableLayout(size), true);
            panel.setName("Panel ID " + i);
            if (temp.size() < 6)
            {
               for (Iterator iter = names.iterator(); iter.hasNext();)
               {
                  JLabel element = (JLabel)iter.next();
                  panel.add(element, x + "," + row + "," + y + "," + row);
                  row += 2;
               }

               x = 3;
               y = 4;
               row = 1;
               for (Iterator iter = temp.iterator(); iter.hasNext();)
               {
                  guiTextField element = (guiTextField)iter.next();
                  panel.add(element, x + "," + row + "," + y + "," + row);
                  row += 2;
               }
            }
            else
            {
               for (Iterator iter = names.iterator(); iter.hasNext();)
               {
                  JLabel element = (JLabel)iter.next();
                  panel.add(element, x + "," + row + "," + y + "," + row);
                  row += 2;
                  if (isAbreast)
                  {
                     row -= 2;
                     x = y + 5;
                     y = x + 1;
                     isAbreast = false;
                  }
                  else
                  {
                     x = 1;
                     y = 2;
                     isAbreast = true;
                  }
               }

               isAbreast = true;
               x = 4;
               y = 5;
               row = 1;
               for (Iterator iter = temp.iterator(); iter.hasNext();)
               {
                  guiTextField element = (guiTextField)iter.next();
                  panel.add(element, x + "," + row + "," + y + "," + row);
                  row += 2;
                  if (isAbreast)
                  {
                     row -= 2;
                     x = y + 5;
                     y = x + 1;
                     isAbreast = false;
                  }
                  else
                  {
                     x = 4;
                     y = 5;
                     isAbreast = true;
                  }
               }
            }
            panels.put(Integer.toString(i), panel);
            System.err.println(panel.getName());
         }
      }
   }

guiTextElement is ein ableitung von JTextField

ich erzeuge mir also für jedes Panel neue JLabels.
 
is ne eigene classe

public class guiTextField extends JTextField implements FocusListener

die hat doch nichts mit dem JLabels zu tun
 
was ist bitte ein foobar????

die Textfelder werden ja eh alle richtig angezeigt....
Nur die JLabels nicht, obwohl ich sie ja bei jedem Schleifendurchlauf neu erzeuge.
 
foobar heißt setze hier was passendes ein :wink:
TheHighlander hat gesagt.:
Nur die JLabels nicht, obwohl ich sie ja bei jedem Schleifendurchlauf neu erzeuge.
Ich kann dazu nichts sagen, da ich ja nicht weiß was du in deiner Collection für Objekte hast.
Fakt ist, in der Schleife die du hier gepostest hast erzeugst du keine neuen Labels sondern holst sie aus der Collection.
Wenn das immer die gleichen sind kann es auch nicht funktionieren.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben