PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GUI und ein Vectorproblem


ZeroJump
03.07.2002, 17:30
Hallo, ich schreibe gerade einen E-Mailclienten. Dazu habe ich einige Fragen:

Erstens: Eingangs- und Ausgangskorb sollen getrennt angezeigt werden können. Dazu habe ich zunächst meinen Hauptframe in 2 Teile geteilt. Links kann man auswählen, was man ansehen möchte, ähnlich wie bei Outlook. Rechts wird dann der Ein- oder Ausgangskorb angezeigt. Zumindest soll es so sein. Mein Problem ist nämlich, dass ich nicht weiss, wie ich zur Laufzeit des Programms einzelne Teile des GUI austauschen kann. Alles, was zu den Mail-Körben gehört befindet sich auf einem JPanel. Eigentlich muss man doch irgendwie das eine JPanel auf Knopfdruck durch ein anderes ersetzen können, oder?

Zweitens: Alle E-Mails werden in einem Vector gehalten und in einer JTable angezeigt. Es soll dem User möglich sein, einzelne Mails zu markieren in der Tabelle und zu löschen. Das heißt sie müssten aus dem Vector entfernt werden. Mit Hilfe einer Methode aus JTable kann ich mir in einem Integer-Array die Zeilen-Nummern geben lassen, von den markierten Zeilen. Genau diese müssen jetzt aus dem Vector gelöscht werden. Allerdings kennt die Vectorklasse keine Methode, um bestimmte Elemente zu entfernen. Ich hab schon ein paar Versuche mit einer for-Schleife gemacht, das Problem ist aber, dass der Vector nach jedem Löschen eines Elements seine Inhalte neu organisiert. Das bedeutet: Lösche ich Element Nummer 4 mit einem Schleifendurchlauf, dann wird Element Nummer 5 im nächsten Durchlauf Nummer 4. Wenn ich bei diesem Durchlauf das ursprüngliche Element Nummer 5 Löschen wollen würde, würde ich Element Nummer 6 löschen.

Kurz: Wie entferne ich auf einmal verschiedene Elemente aus einem Vector?

PS: Kann man mir folgen?


StoreMaster
03.07.2002, 18:43
bin auch einmal auf die schleife reingefallen. hab aber dann gleich diesen lösungsweg eingeschlagen:

package test;

import java.util.Vector;

public class Unbenannt1 {
public static void main(String[] args) {
Vector vector = new Vector(10);

for(int i=0;i<20;i++) vector.add(new Integer(i));
for(int j=10;j<15;j++) vector.removeElement(new Integer(j));
for(int k=0;k<vector.size();k++) System.out.println(vector.get(k));
}
}kannst du damit was anfangen?

Jack
04.07.2002, 11:54
Also was das Austauschen betrifft, so stellt der JPanel die Funktion remove bereit. Alles, was du dann machen musst, nachdem du das neue Component hinzugefügt hast ist, dem JPanel zu sagen, daß es seine Inhalte neu zeichnen soll. Das machst du mit der updateUI().
Damit sollte es eigentlich klappen.

Was den Vector angeht, würde es nicht reichen, wenn du, statt mit der niedrigsten Zeile anzufangen, die höchste zuerst löschst ?
Also beispielsweise Zeile 3,5 und 7 sind zu löschen, dann fang bei der 7 an, lösche danach die 5 und dann erst die 3 ?
(Weiß nich genau, ob ich dein Problem verstanden hab, aber das wäre jetzt so mein erster Gedanke)

ZeroJump
04.07.2002, 17:01
Hi Jack,

die Idee mit dem Vector ist toll. Warum bin ich da nicht drauf gekommen? So werde ich es lösen.

Zu dem anderen Problem: Ich habe es mit einem CardLayout gebastelt und es erfüllt auch seine Zwecke so wie ich das haben möchte.

Thx, für eure Antworten und diesen guten Tipp von Jack.

PS: @StoreMaster, muss gestehen, hab erst Jacks Tipp gelesen und hab mir dann Deine Schleifen nicht mehr genau angeguckt. Trotzdem danke...