jtables in arraylist speichern

swingnewbie

Grünschnabel
Hallo! Ich habe ein Programm geschrieben, womit ich in einem JFrame eine beliebige Anzahl an jtables einfügen kann (per Menüklick und Actionlistener). Nun will ich eine beliebige Jtable auch löschen können. Dazu muss ich die jtables ja verwalten, ich denke da käme eine ArrayList in Frage. Nur weiss ich nicht, wie ich das anstellen kann
Hier ist die Methode zur Erzeugung der Tabelle:

Code:
private JTable createTable() {
		Object [][]data = { {}, {}, {},{},{},{},{}};
		String [] columnNames = {""};
		DefaultTableModel jTable1Model= new DefaultTableModel(data, columnNames);
		JTable jTable1 = new JTable(jTable1Model);
		jTable1.setModel(jTable1Model);
		jTable1.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));
		jTable1.setGridColor(new java.awt.Color(0,0,0));
		jTable1.setRowSelectionAllowed(true);
		jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);          
		return jTable1;
	}

Die Tabellen werden durch eine Methode
Code:
public void addNewTable(JTable jTable)
im Frame gezeichnet. Diese Methode ist in einer eigenen Klasse namens TableContainer deklariert und in meiner Hauptklasse dann durch
Code:
tablearea = new TableContainer();
aufgerufen.Die Tabellen erscheinen dann hiermit im Frame:
Code:
public void actionPerformed(ActionEvent editEvent) {
							if (editEvent.getActionCommand().equalsIgnoreCase("New Module"))
							{
								JTable jTable1= createTable();
	                            tablearea.addNewTable(jTable1);
	                            repaint();						
								
							}
Wie kann ich die Tabellen jetzt in einer ArrayList speichern und sie löschen?
Wäre sehr dankbar für Hilfe.
 
Hallo,

eine ArrayList kannst du so anlegen:

1. Definition
ArrayList aListKey = new ArrayList(5); (hier mit 5 Elementen)
2. Füllen
aListKey.add("Inhalt 1");
aListKey.add("Inhalt 2");
3. Inhalte abrufen
System.out.println(aListKey.get(0).toString()); erste Eintrag
System.out.println(aListKey.get(1).toString()); zweite Eintrag

Deine Tabellen löschen kannst du mit: jTable1.removeAll();
 
Ich glaube er meint mit "Tabelle löschen" das entfernen einer Tabelle aus der Area.

Das muesste so klappen: tableArea.remove(ausgewaehlteTabelle);

Im Grunde genommen brauchst du da dann auch keine ArrayList, sonst muesstest du Tabelle dort auch löschen. Außerdem brauchst du bei der ArrayList keine Elementeanzahl angeben, ist ja dynamisch und nicht statisch.
 
Hallo, danke für die Antworten. Ich möchte in der Tat eine beliebige Tabelle aus dem JFrame löschen können. Deinen Vorschlag (Kahra) kenne ich, habe ich auch so benutzt, als ich nur eine Tabelle im Frame hatte. Aber klappt das auch, wenn ich mehrere hab? Mir geht es um die Verwaltung mehrerer Tabellen. Ich hab ja in meinem Programm eine Methode, die immer ein Default TableModel mit jTable1 erzeugt, wenn ich die Tabellen zeichnen will. Nach deiner Lösung müsste ich meine createTable Methode ändern oder?
Ich hatte es mir so gedacht, dass ich diese leere jTable1 immer wieder erzeuge und jedes in einer Arraylist speichere. Dadurch sind den gezeichneten Tabellen Indizes zugeordnet. Will der User nun eine der Tabellen löschen, muss er den Index der jew. Tabelle in einem Fenster eingeben. Dieses wird dann aus der ArrayList und dem Frame gelöscht.
 
So kannst du es natürlich auch machen.
Ich bin jetzt davon ausgegangen das er die Tabelle irgendwie anklickt oder auswählt...

Sagen wir der Nutzer will die fünfte Tabelle löschen, dann muesste der Code an irgendeiner Stelle ungefähr so aussehen so aussehen:

Code:
   JTable temp = (JTable) aListKey.get(4);
   tableArea.remove(temp);
   aListKey.remove(4);

So oder so ähnlich muesste es dann ja eigentlich funktionieren. Sollte eigentlich nicht so schwer sein. Deine Create-Funktion sollte schon okay sein. Dein JTable1 ist ja eh bloß "temporär" und verschwindet wieder nach beenden der Funktion.

Bei actionPerformed muesstest du die neue Tabelle dann noch in die ArrayListe hinzufügen. Ich glaube es ist vllt sogar noch besser (vllt machst du es auch so), wenn du die Liste auch direkt in deiner TableArea speicherst, dann würde eine Zeile
tableArea.remove(4) schon reichen.

Poste doch mal den Quelltext zur TableArea.
 
ok, also hier der Quelltest zur Methode addNewTable aus der Klasse TableContainer:
Code:
public void addNewTable(JTable jTable) {
      this.constraints.gridy++;
      this.add(jTable,constraints);
      super.repaint();
      super.revalidate();
    }
 
Mal eine andere Frage....anfangs hatte ich auch vor eine beliebige Tabelle per Anklicken löschen zu können. Das wäre natürlich viel besser, hab es aber nie hinbekommen. Wie müsste man das denn anstellen
 
Moin!
das wäre eine Möglichkeit:
Code:
public void addNewTable(JTable jTable) {
      this.constraints.gridy++;
      jTable.addMouseListener(this);
      this.add(jTable,constraints);
      super.repaint();
      super.revalidate();
    }

public void mouseReleased(MouseEvent e) {
    Object[] options = {"Yes","No"};
    int n = JOptionPane.showOptionDialog(parent - component,"remove this  table?","question",JOptionPane.YES_NO_CANCEL_OPTION,OptionPane.QUESTION_MESSAGE,null,options,options[0]);
    if(n == 0)
      paren - component.remove(e.getSource());
}
,wobei parent - component der container ist, in dem du deine tables eingefügst .
Kannst natürlich z.B mit e.getButton(); festlegen, dass diese Frage nur beim Klicken der rechten Maustaste erscheint...
*grüssle*
MeinerEiner
 
Hmmmm, hab den Vorschlag mal ausprobiert, kriege aber eine Fehlermeldung Syntax error on token "-", Invalid Assignment Operator :( Ich mach wohl was falsch
 
Moin!
Wie ich schon sagte:
MeinerEiner_80 hat gesagt.:
wobei parent - component der container ist, in dem du deine tables eingefügst .
Wenn ich das richtig sehe, ist dies der TableContainer in dem du alles machst,
ersetze also "parent-component" durch "this".
Weiterhin, muss der TableContainer natürlich das Interface MouseListener implementieren und somit nicht nur die "mouseReleased(MouseEvent e)" Methode besitzen.
Ich würde dir empfehlen, mal diesbezülich ein paar Tutorials zu lesen, wie zum Beispiel:
http://java.sun.com/docs/books/tutorial/uiswing/events/mouselistener.html


*grüssle*
MeinerEiner
 
Zurück