JTable Vergleich, ob Änderung vorliegt.

Maddili

Mitglied
Hi, ich habe eine FixedTable (FixedTable), die ich mit Daten aus einer SQL DB befülle.

Nun möchte ich wissen, ob sich ein Datensatz verändert hat (bei wechsel des "Projekts"), um zu fragen, ob gespeichert werden soll.

Die Tabelle sieht folgendermaßen aus:
PersNr, Name, Fkt, Abteilung, Daten (double) für 5 jahre á 12 Monate


Soll ich das über Vectoren machen? Also nach dem befüllen der Table einen Vector[][] anlegen, und beim Verlassen einen Vector[][] anlegen?
Wie werden diese dann verglichen?


Außerdem habe ich von einem Praktikanten zwei Klassen (aus einem anderem Programm) zur Verfügung gestellt bekommen. Könnt ihr mal gucken, ob die mir weiterhelfen**** Ich komm damit nicht zurecht.


Java:
package test;

import java.util.Vector;


public class VectorCompare {
	public VectorCompare() {
	}

	XMLread xml = new XMLread();


	public String[][] getChangedElements(String[] Bezeichnungen,
			Vector PanelContent, Vector ResultSetContent)
			throws NullPointerException {

		int PanelLength = PanelContent.size();
		int ResultSetLength = ResultSetContent.size();
		int BezeichnungenLength = Bezeichnungen.length;

		if ((PanelLength != ResultSetLength
				|| PanelLength != BezeichnungenLength || ResultSetLength != BezeichnungenLength)) {
			System.out.println(xml.getLabel("errorinclass")
					+ "VectorCompare, Methode: getChangedElements");
			throw new NullPointerException("invalid length");
		}
		int NumberofChanges = this.getNumberofChanges(Bezeichnungen,
				PanelContent, ResultSetContent);
		String[][] changedValues = new String[NumberofChanges][3];
		int FillValue = 0;
		for (int i = 0; i < BezeichnungenLength; i++) {
			String temp = String.valueOf(ResultSetContent.get(i)).toString();
			if (!(PanelContent.get(i).toString().trim().equals(ResultSetContent
					.get(i)))
					&& !((PanelContent.get(i).toString().trim()).equals(temp
							.trim()))) {
				if ((!(PanelContent.get(i).toString().trim().equals("")) || (PanelContent
						.get(i).equals(null)))) {
					changedValues[FillValue][0] = (String) Bezeichnungen[i];
					changedValues[FillValue][1] = (String) PanelContent.get(i);
					changedValues[FillValue][2] = (String) ResultSetContent
							.get(i);
					FillValue++;
				} else if (PanelContent.get(i).toString().trim().equals("")
						&& ResultSetContent.get(i) != null) {
					changedValues[FillValue][0] = (String) Bezeichnungen[i];
					changedValues[FillValue][1] = "NULL";
					changedValues[FillValue][2] = (String) ResultSetContent
							.get(i);
					FillValue++;
				}
			}
		}
		return changedValues;
	}

	/**
	 * Methode gives you the number of changes<br>
	 * Diese Methode gibt die Anzahl der Veränderungen zurück
	 *
	 * @param Bezeichnungen
	 * @param PanelContent
	 * @param ResultSetContent
	 * @return ReturnValue
	 * @throws NullPointerException
	 */

	public int getNumberofChanges(String[] Bezeichnungen, Vector PanelContent,
			Vector ResultSetContent) throws NullPointerException {
		int PanelLength = PanelContent.size();
		int ResultSetLength = ResultSetContent.size();
		int BezeichnungenLength = Bezeichnungen.length;
		if ((PanelLength != ResultSetLength
				|| PanelLength != BezeichnungenLength || ResultSetLength != BezeichnungenLength)) {
			System.out.println(xml.getLabel("errorinclass")
					+ "VectorCompare, Methode: getNumberofChanges");
			throw new NullPointerException("invalid length");
		}

		int ReturnValue = 0;
		for (int i = 0; i < BezeichnungenLength; i++) {
			// values from panel and resultSet are not the same
			// verschiedene Werte im Panel und vom ResultSet
			String temp = String.valueOf(ResultSetContent.get(i)).toString();
			if (!(PanelContent.get(i).toString().trim().equals(ResultSetContent
					.get(i)))
					&& !((PanelContent.get(i).toString().trim()).equals(temp
							.trim()))) {
				if ((!(PanelContent.get(i).toString().trim().equals("")) || (PanelContent
						.get(i).equals(null))))
					ReturnValue++;
				else if (PanelContent.get(i).toString().trim().equals("")
						&& ResultSetContent.get(i) != null)
					ReturnValue++;
			}
		}
		return ReturnValue;
	}
}


Java:
import java.util.Vector;


public class VectorMerge {
	public VectorMerge() {
	}

	XMLread xml = new XMLread();

	public String[][] getAllElements(String[] Bezeichnungen,
			Vector PanelContent, Vector ResultSetContent)
			throws NullPointerException {

		int PanelLength = PanelContent.size();
		int ResultSetLength = ResultSetContent.size();
		int BezeichnungenLength = Bezeichnungen.length;

		if ((PanelLength != ResultSetLength
				|| PanelLength != BezeichnungenLength || ResultSetLength != BezeichnungenLength)) {
			System.out.println(xml.getLabel("errorinclass")
					+ "VectorCompare, Methode: getChangedElements");
			throw new NullPointerException("invalid length");
		}

		int NumberofChanges = PanelLength;
		String[][] changedValues = new String[NumberofChanges][3];
		int FillValue = 0;
		for (int i = 0; i < BezeichnungenLength; i++) {
			if (!(PanelContent.get(i).equals(""))) {
				changedValues[FillValue][0] = (String) Bezeichnungen[i];
				changedValues[FillValue][1] = (String) PanelContent.get(i);
				changedValues[FillValue][2] = (String) ResultSetContent.get(i);
				FillValue++;
			} else {
				changedValues[FillValue][0] = (String) Bezeichnungen[i];
				changedValues[FillValue][1] = "NULL";
				changedValues[FillValue][2] = (String) ResultSetContent.get(i);
				FillValue++;
			}

		}
		return changedValues;
	}
}


Vielen Dank,
Maddin
 
Du könntest mit einem Listener arbeiten.
Ein TableModel besitzt folgende Methode:
Java:
void addTableModelListener(TableModelListener l) 
          Adds a listener to the list that is notified each time a change to the data model occurs.
Ein TableModelListener wiederum besitzt folgende Methode:
Java:
void tableChanged(TableModelEvent e) 
          This fine grain notification tells listeners the exact range of cells, rows, or columns that changed.
Diese wird immer aufgerufen, wenn sich etwas ändert. Das TableModelEvent liefert dir weitere Informationen, die du gebrauchen könntest.
 
Zurück