import java.io.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
/*
Es sind nicht alle Funktionen ausprogrammiert (so wie setValueAt(..) usw!
Es sind nur diese Funktionen ausprogrammiert, die man auch braucht fürs auslesen/anzeigen
und für das sortieren!
(das Statement braucht außerdem noch eine Verbindung! - man könntes mitübergeben bei der loadfunktion!)
*/
public class KundeTabModel extends DefaultTableModel{
/**
*
*/
private static final long serialVersionUID = 1L;
String[] columnNames =
{
"Kundenkürzel" , "Kunden-Nr", "Kunde", "Strasse", "Ort", "Land","VAT-Nr.","Homepage"}; //Überschriften der Tabelle
private Object data[];
// private Statement stm = null;
private ResultSet rs = null;
private ArrayList<Haupt> ar = null;
private boolean bErg = true;
Object[][] rawData;
/**************************************************************************
* Konstruktor für TabModel, indem die Spaltenbezeichnungen definiert werden
* und initDateTable wird aufgerufen
*************************************************************************/
public KundeTabModel(Object[][] rowData){
}
public KundeTabModel()
{
try
{
columnNames[0] = "Kundenkürzel";
columnNames[1] = "Kunden-Nr";
columnNames[2] = "Kunde";
columnNames[3] = "Strasse";
columnNames[4] = "Ort";
columnNames[5] = "Land";
columnNames[6] ="VAT-Nr.";
columnNames[7] ="Homepage";
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/***************************************************************************
* Spaltenanzahl
* @return Anzahl der Spalten
*************************************************************************/
public int getColumnCount()
{ //Anzahl der Spalten
return columnNames.length;
}
/***************************************************************************
* Zeilenanzahl
* @return Anzahl der Zeilen
*************************************************************************/
public int getRowCount()
{ //Anzahl der Zeilen
if (data == null)
return 0;
return (data.length);
}
/**************************************************************************
* Name einer Spalte
* @param iCol Position der Spalte
* @return Name der übergebenen Spalte
*************************************************************************/
public String getColumnName(int iCol)
{ //Name der Spalten
return columnNames[iCol];
}
/**************************************************************************
* Wert einer Spalte in einer bestimmten Zeile
* @param iRow Index der Zeile
* @param iCol Position der Spalte
* @return Wert an der Stelle row / col
*************************************************************************/
public Object getValueAt(int iRow, int iCol)
{ //Retouniert Wert an bestimmter Stelle
Object objRet = null;
if (iRow < data.length && data[iRow] != null) // gibt die Objekte zurück
{
Haupt pl = (Haupt) data[iRow];
switch (iCol)
{
case 0:
objRet = pl.firmenk;
break;
case 1:
objRet = Integer.toString(pl.kd_nr);
break;
case 2:
objRet = pl.kunde;
break;
case 3:
objRet = pl.strasse;
break;
case 4:
objRet = pl.ort;
break;
case 5:
objRet = pl.land;
break;
case 6:
objRet = pl.vta_nr;
break;
case 7:
objRet = pl.hp;
break;
}
}
return objRet;
}
/*************************************************************************
* Hinweis: Je für Programm abänderbar
* @param row Index der Zeile
* @param col Position der Spalte
* @return false für not editable, true für editable
*************************************************************************/
public boolean isCellEditable(int row, int col)
{
return false;
}
/**************************************************************************
* Lädt die Daten von der Datenbank einmal in datatable und einmal in einen array
* und danach in data
*************************************************************************/
public void loadFromADatabase()
{
DatabaseConnection dbcon = new DatabaseConnection();
Connection con = null;
con = dbcon.openConnection();
try
{
Statement stm = con.createStatement();
ar = new ArrayList<Haupt>();
//führt den SQL Befehl aus
rs = stm.executeQuery("SELECT * FROM haupt"); //man kann die Daten auch anders holen, und zwar File einlesen, usw
if (!rs.next()) // falls es kein nächstes gibt
bErg = false;
if (bErg) // default mäßig auf true, falls es kein Ergebnis gibt geht er nicht rein
{
do
{
bErg = true;
Haupt pl = new Haupt();
//hauptTabelle
pl.kd_nr = rs.getInt(2);
pl.firmenk = rs.getString(3);
pl.kunde = rs.getString(4);
pl.strasse = rs.getString(5);
pl.ort = rs.getString(6);
pl.land= rs.getString(7);
pl.vta_nr=rs.getString(8);
pl.hp=rs.getString(9);
//Ansprechpartner
ar.add(pl); //fügt die Klasse in den Array hinzu
}
while (rs.next()); //solange es einen nächsten gibt
}
rs.close();
stm.close();
data = ar.toArray(); // Array wird in ein Objekt geholt um es nachher für die Table auszugeben
fireTableDataChanged(); // lässt die Tabelle neu zeichnen
fireTableStructureChanged();
dbcon.closeConnection();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
/*************************************************************************
* Beispiel lädt Daten aus einer Datei die mit ; getrennt sind
* @param fFile die Datei
************************************************************************/
public void loadFromAFile(File fFile)
{
int iAnzToken; // abfrage auf wieviel ; die linie hat
StringTokenizer token;
String line = "",buf[];
try{
//reader um aus der Datei zu lesen
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream(fFile)));
//Arrayliste neu initialisieren
ar = new ArrayList<Haupt>();
while ( (line = br.readLine()) != null)
{
token = new StringTokenizer(line, ";", false); //wird davon ausgegangen das es mit ; getrennt ist
iAnzToken = token.countTokens();
buf = new String[iAnzToken];
for(int x = 0; x != iAnzToken && token.hasMoreTokens(); x++)
buf[x] = token.nextToken();
Haupt pl = new Haupt();
pl.kd_nr = Integer.parseInt(buf[0]);
pl.firmenk = buf[1];
pl.kunde = buf[2];
pl.strasse = buf[4];
pl.ort = buf[5];
pl.land= buf[6];
pl.vta_nr=buf[10];
pl.hp=buf[11];
ar.add(pl); //fügt die Klasse in den Array hinzu
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
/****************************************************************************
* Funktion liefert ein JTable zurück
* @return ein JTable objekt
***************************************************************************/
public JTable getModel()
{
return new JTable(this);
}
/****************************************************************************
* Setzt das Model neu!
* @param TableModel1 das tablemodel das gesetzt werden soll
***************************************************************************/
public void setModel(TableModel TableModel1)
{
ar = new ArrayList<Haupt>(); //alles neu schreiben
for (int x = 0; x != TableModel1.getRowCount(); x++)
{
//neues Objekt zum Einhängen
Haupt pl = new Haupt();
for (int y = 0; y != TableModel1.getColumnCount(); y++)
{
switch (y)
{
case 0:
pl.kd_nr = Integer.parseInt(TableModel1.getValueAt(x, y).toString());
break;
case 1:
pl.firmenk = TableModel1.getValueAt(x, y).toString();
break;
case 2:
pl.kunde = TableModel1.getValueAt(x, y).toString();
break;
case 3:
pl.strasse = TableModel1.getValueAt(x, y).toString();
break;
case 4:
pl.ort = TableModel1.getValueAt(x, y).toString();
break;
case 5:
pl.land = TableModel1.getValueAt(x, y).toString();
break;
case 6:
pl.vta_nr = TableModel1.getValueAt(x, y).toString();
break;
case 7:
pl.hp = TableModel1.getValueAt(x, y).toString();
break;
}
}
ar.add(pl);
}
data = ar.toArray(); // Array wird in ein Objekt gespeichert um es nachher für die Table auszugeben
}
class Haupt
{
int kd_nr;
String firmenk;
String kunde;
String strasse;
String ort;
String land;
String vta_nr;
String hp;
}
}