je werkt met defaultlistmodel
zie
http://www.java2s.com/Code/Java/Swin...tListModel.htm
of via TABELMODEL ZIE (niet volgens alle regels)
Code:
package be.djdb.utils.table;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.AbstractTableModel;
import be.djdb.Statics;
import be.djdb.utils.Projectresources;
import be.djdb.utils.Projectsettings;
/**
* @author Lieven Roegiers
* @copyright 2011
* @from JAVA_mylibs
* @version java 1.4+
*/
public class OptionsTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private static ResourceBundle translations;
private Vector keys = new Vector();
private Vector values = new Vector();
private Vector datatype = new Vector();
private Projectsettings settingstest;
private static final String columnNames[] = {"key", "Value","type" };
public int getColumnCount() {
return columnNames.length;
}
/**
* @param settings
*/
public OptionsTableModel(Projectsettings settings) {
settingstest = settings;
setdata(settingstest.gethashtable());
}
/**
* @param settings
* @param translationsPropertieFileName
*/
public OptionsTableModel(Projectsettings settings,String translationsPropertieFileName) {
translations = ResourceBundle.getBundle(translationsPropertieFileName);
settingstest = settings;
setdatatranslated(settingstest.gethashtable());
}
/*
* (non-Javadoc)
* @see javax.swing.table.AbstractTableModel#getColumnName(int)
*/
public String getColumnName(int column) {
return columnNames[column];
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getRowCount()
*/
public int getRowCount() {
return keys.size();
}
/* (non-Javadoc)
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
public Object getValueAt(int row, int column) {
Object returnValue=null;
log(Level.ALL, "<ERROR: getValueAt>ArrayIndexOutOfBoundsException Projectsettings properties emty"+row+column );
try {
if (column == 0) {
returnValue = keys.elementAt(row);
} else if (column == 1) {
returnValue = values.elementAt(row);
} else if (column == 2) {
if (Statics.DEBUG){
returnValue = datatype.elementAt(row);
}
}
}catch(ArrayIndexOutOfBoundsException ae){
log(Level.ALL, "<ERROR: getValueAt>ArrayIndexOutOfBoundsException Projectsettings properties emty");
}catch(Exception e){
log(Level.FINEST, "<ERROR: getValueAt> <FINEST>"+e+"</FINEST>");
}
return returnValue;
}
/**
*
*/
private void init(){
keys.removeAllElements();
values.removeAllElements();
datatype.removeAllElements();
}
/* (non-Javadoc)
* @see javax.swing.table.AbstractTableModel#getColumnClass(int)
*/
public Class getColumnClass(int c) {
if(Statics.FOLLOW){log(Level.WARNING, "colom:"+c);};
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col != 1) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
if (Statics.DEBUG){log(Level.FINE, "<SET VALUE> <POS:"+row+","+col+"|TO:"+value+"//"+value.getClass()+">");}
try{
values.set(row, value);
String key = (String)keys.get(row);
settingstest.setProperty(key, value.toString());
fireTableCellUpdated(row, col);
//fireTableCellUpdated(row, col);
}catch(Exception e){
log(Level.ALL, "<ERROR: SET VALUEAT> <POS:"+row+","+col+"|KEY:"+keys.get(row).toString()+"TO:"+value+"//"+value.getClass()+">");
printDebugData();
log(Level.FINEST, "<ERROR: setValueAt> <FINEST>"+e+"</FINEST>");
}
if (Statics.DEBUG) {log(Level.FINE,"<NEW VALUE>");printDebugData();}
}
private static void log(Level level, String msg ){
String tag ="<>>>>*"+Statics.LIBNAME+"-"+Statics.COPYRIGHTBY+"*<<<<>StreamManipulator";
Logger.getLogger(OptionsTableModel.class.getName()).log(level, tag + msg);
}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
log(Level.FINEST,"-<start>-");
for (int i=0; i < numRows; i++) {
log(Level.FINEST," row " + i + ":");
for (int j=0; j < numCols; j++) {
log(Level.FINEST," + data[i][j]");
}
}
log(Level.FINEST,"-<end>-");
}
private synchronized void setdata(Hashtable<Object, Object> table) {
Set set = table.entrySet();
Iterator it = set.iterator();
init();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
keys.addElement( entry.getKey());
Object val =entry.getValue();
values.addElement(val);
datatype.addElement(val.getClass().getName());
}
fireTableDataChanged();
}
private synchronized void setdatatranslated(Hashtable<Object, Object> table) {
Set set = table.entrySet();
Iterator it = set.iterator();
init();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
keys.addElement(translations.getString((String)entry.getKey()));
Object val =entry.getValue();
values.addElement(val);
datatype.addElement(val.getClass().getName());
}
fireTableDataChanged();
}
}