JDiaolog schließen.

Status
Nicht offen für weitere Antworten.

till123

Bekanntes Mitglied
Hallo,

ich habe mal wieder ein kleines Problemchen:

Von einem JFrame aus, wir ein JDialog geöffnet.
Der Konstruktor beinhaltet auch einen Vektor mit String[], welche dann im neuen JDialog in einer Tabelle angezeigt werden.

Nun habe ich aber das Gefühl, dass wenn ich den JDialog schließe (mit einem dispose() ), der zuvor initialisierte Vektor (oder besser gesagt das JTable) im JDialog weiterhin existiert...?
Das äußert sich so, dass wenn ich den JDialog mit einem anderen Vektor öffne, der alte Vektor (also Inhalt) immer noch angezeigt wird.

D.h., z.B.: Wenn der Vektor sechs Elemente beinhaltet, dann werden zuerst auch die sechs Elemente ordnungsgemäß dargestellt. Schließe ich den JDialog, und rufe ihn danach wieder auf (z.B. wieder mit einem Vektor mit sechs Elementen), dann wird im JTable zuerst der "alte" Vektor und hintendran gereiht der neue Vektor ausgegeben.
(Die Vektorgröße ist bei jedem JDialogaufruf sechs!)

Habt ihr da eine Idee? Muss ich mein jTabel manuell löschen, wenn ich den JDialog schließe?..?


Hier mal der Quellcode:

Code:
package gui;
import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JButton;


import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;



public class ShowResult extends javax.swing.JDialog {
	private JScrollPane jScrollPane1;
	private Vector resultOfAnalysis;
	private JTable tableColumns;
	private String windowDescription;
	private JButton closeShowResults;

	public ShowResult(InsertQueries frame,Vector resultOfAnalysis, String windowDescription) {
		super(frame);
		this.resultOfAnalysis=resultOfAnalysis;
		this.windowDescription=windowDescription;
		initGUI();
	}
	
	private void initGUI() {
		try {
			AnchorLayout thisLayout = new AnchorLayout();
			getContentPane().setLayout(thisLayout);
			this.setTitle("Ergebnis der Abfrage");
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1, new AnchorConstraint(10, 980, 850, 20, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				{
					tableColumns = getTableColumns();
					jScrollPane1.setViewportView(tableColumns);
				}
			}
			{
				closeShowResults = new JButton();
				getContentPane().add(closeShowResults, new AnchorConstraint(910, 550, 960, 450, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				closeShowResults.setText("Ok");
				closeShowResults.addMouseListener(new MouseAdapter() {
					public void mouseClicked(MouseEvent evt) {
						closeShowResultsMouseClicked(evt);
					}
				});
			}
			setSize(1200, 800);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private JTable getTableColumns() {
		int numberOfRows = resultOfAnalysis.size();
		int numberOfColumns = ((String[]) resultOfAnalysis.firstElement()).length;
		DefaultTableModel tableColumnsModel = 
				new DefaultTableModel(
						new String[numberOfRows][numberOfColumns] ,
						(String[]) resultOfAnalysis.firstElement())
        {
            public boolean isCellEditable(int row, int col)
            {
                return false;
            }

        }; 
			tableColumns = new JTable();
			jScrollPane1.setViewportView(tableColumns);
			tableColumns.setModel(tableColumnsModel);
			resultOfAnalysis.removeElementAt(0);   
			for (int i=0;i<numberOfRows-1;i++)
            {
            	String[] helpMeArray = (String[])resultOfAnalysis.elementAt(i);
                for (int j=0;j<numberOfColumns;j++) 
                	{
                		tableColumns.setValueAt(helpMeArray[j],i,j);
                	}
            }
		return tableColumns;
	}

	
	private void closeShowResultsMouseClicked(MouseEvent evt) {
		this.dispose();
	}

}
 
Hm ???:L beim ersten Drüberlesen ist mir jetzt erstmal nichts falsches ins Auge gesprungen - wenn jedes Mal eine neue Instanz des Dialogs erzeugt wird, kann da eigentlich nichts übrigbleiben. Bist du sicher, dass der übergebene Vector NUR das enthält, was er enthalten soll? Gib' am besten mal im Konstruktor die größe des Vektors (und am besten auch gleich seinen Inhalt) aus, und schau' ob da was nicht stimmt...
 
Hallo,

das habe ich schon überprüft:
Die Größe des Vektors (ermittelt mit .size()) stimmt! Es wird immer angezeigt, das der Vektor (in meinen Testfällen) sechs Elemente beinhaltet! So soll es auch sein.


Na mal schauen, wenn die GUI soweit richtig aussieht, dann steckt der Teufel irgendwo im Detail 😉


Aber wenn noch einer eine Idee hat... Bin für alles Dankbar.
 
"dispose()" gibt nur die nativen Bildschirm Resourcen frei, die von diesem Fenster benutzt werden.
Das Fenster, mit allen Teilkomponenten, kann mit setVisible(true) wieder sichtbar gemacht werden
wodurch die nativen Resourcen neu angelegt werden.

Der Status des neuerstellten Fensters mit den Teilkomponenten ist danach
identisch mit dem Status, den diese Objekte hatten als das Fenster "disposed" wurde
(mit Ausnahme von zusätzlichen Änderungen zwischen diesen Aktionen).

In dem Fall wäre es also völlig normal, daß die JTable immer noch den alten Inhalt hat.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben