Hallo,
bin noch ein relativer Java-Neuling und bräuchte ganz dringend Hilfe bei der Aktualisierung meines JPanels.
Der Dialog soll eine variable Anzahl von Zeilen enthalten, in welchen CheckBoxes und TextAreas enthalten sind. Jede Zeile hat den gleichen Aufbau.
Dies funktioniert ohne weiteres, indem ich für die CheckBoxes sowie die TextAreas jeweils ArrayLists generiert habe und die Objekte den ArrayLists nach dem Anlegen hinzufüge.
In das Layout werden dann die einzelnen Elemente der ArrayList ausgelesen. Hier ein kleiner Auszug:
Nach dem Löschen einzelner Zeilen (über einen entsprechenden Button) möchte ich die Ansicht anpassen.
Ich würde dafür gern über die schon existierenden Objekte der ArrayLists zugreifen, um nicht nochmals alle Objekte neu zu erstellen. Wenn ich diese jedoch verwende, werden die Objekte immer am ursprünglichen Platz wieder angelegt, die gelöschte Zeile bleibt in der Ansicht leer obwohl ich alle Elemente mit removeAll() zunächst gelöscht habe.
Dass man Objekte nicht zweimal in einer Ansicht verwenden kann ist mir klar, kann man diese auch nicht an unterschiedlichen Zeilen im TableLayout darstellen? Die ArrayLists sind korrekt aufgebaut, sie enthalten keine leeren Felder. Das removeAll() funktioniert auch, allerdings ist der Aufbau trotz des richtigen Indexes fehlerhaft. Hier der Code für das Löschen und neu Zeichnen:
Hat jemand eine Idee, wie ich die gleichen Objekte beim Aktualisieren der Ansicht im TableLayout an eine andere Position als die Ursprüngliche setzen kann?
Vielen Dank!
bin noch ein relativer Java-Neuling und bräuchte ganz dringend Hilfe bei der Aktualisierung meines JPanels.
Der Dialog soll eine variable Anzahl von Zeilen enthalten, in welchen CheckBoxes und TextAreas enthalten sind. Jede Zeile hat den gleichen Aufbau.
Dies funktioniert ohne weiteres, indem ich für die CheckBoxes sowie die TextAreas jeweils ArrayLists generiert habe und die Objekte den ArrayLists nach dem Anlegen hinzufüge.
In das Layout werden dann die einzelnen Elemente der ArrayList ausgelesen. Hier ein kleiner Auszug:
Java:
textArea = new ArrayList<JTextArea>();
checkBox = new ArrayList<JCheckBox>();
// TableLayout definieren
double rows[] = new double[17];
int i;
rows[0] = 5;
for( i=1; i<=15;i++)
{
rows[i] = new Double(30);
}
rows[i] = 5;
double border = 10;
double size[][] =
{{border, 0.40, border, 0.60, border}, // Columns
rows}; // Rows
setLayout (new TableLayout(size));
iter = pools.iterator();
i=0;
while(iter.hasNext() )
{
qp = (iter.next());
cb = new JCheckBox(qp.getTitle());
cb.setName(qp.getTitle());
cb.setBackground(Color.WHITE);
cb.addItemListener(this); //beobachtet wieviele Checkboxes ausgewählt sind
checkBox.add(cb);
add(checkBox.get(i),"1,"+(i+1)+",f,t"); //Ausrichtung horizontal full, vertikal top
ta = new JTextArea(qp.getDescription());
ta.setEditable(false); //soll nur im Bearbeiten-Fenster bearbeitet werden können
textArea.add(ta);
add(textArea.get(i),"3,"+(i+1)+",f,c"); //Ausrichtung horizontal full, vertikal center
i++;
}
}
Ich würde dafür gern über die schon existierenden Objekte der ArrayLists zugreifen, um nicht nochmals alle Objekte neu zu erstellen. Wenn ich diese jedoch verwende, werden die Objekte immer am ursprünglichen Platz wieder angelegt, die gelöschte Zeile bleibt in der Ansicht leer obwohl ich alle Elemente mit removeAll() zunächst gelöscht habe.
Dass man Objekte nicht zweimal in einer Ansicht verwenden kann ist mir klar, kann man diese auch nicht an unterschiedlichen Zeilen im TableLayout darstellen? Die ArrayLists sind korrekt aufgebaut, sie enthalten keine leeren Felder. Das removeAll() funktioniert auch, allerdings ist der Aufbau trotz des richtigen Indexes fehlerhaft. Hier der Code für das Löschen und neu Zeichnen:
Java:
public void qpDeleted(HashMap<?,Integer> selektiert)
{
this.removeAll();
Iterator iterator = selektiert.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry e = (Map.Entry) iterator.next();
int wert = (Integer) e.getValue();
checkBox.remove(wert);
textArea.remove(wert);
}
Iterator<JCheckBox> itercb = checkBox.iterator();
int i=0;
while(itercb.hasNext() )
{
cb = itercb.next();
add(cb,"1,"+(i+1)+",f,t"); //Ausrichtung horizontal full, vertikal top
add(textArea.get(i),"3,"+(i+1)+",f,t");
i++
}
}
Hat jemand eine Idee, wie ich die gleichen Objekte beim Aktualisieren der Ansicht im TableLayout an eine andere Position als die Ursprüngliche setzen kann?
Vielen Dank!
Zuletzt bearbeitet: