JTable updaten/refreshen

Status
Niet open voor verdere reacties.

Virusbeatboxing

Gebruiker
Lid geworden
11 nov 2011
Berichten
41
Beste,

ik ben momenteel een Java applicatie aan het maken. In één van m'n schermen wil ik users weergeven. Hiervoor heb ik een JTable geplaatst met daaronder een knop. Van zodra er op deze knop gedrukt wordt, opent er een JDialog waarin een nieuwe user kan toegevoegd worden.
Van zodra alles succesvol is verlopen, wordt de user weggeschreven naar de database en krijgt men de melding dat de user succesvol is aangemaakt.

Daarna sluit deze JDialog automatisch waarna er een waarde wordt teruggeven aan mijn 1e scherm zodat deze op de hoogte is van de status. Hierdoor wil ik dan mijn JTable updaten met de nieuw toegevoegde gebruiker.

Hiervoor heb ik reeds enkele suggesties op het internet uitgeprobeerd maar allemaal zonder succes.
Suggesties geprobeerd:

- .revalidate() uitvoeren op mijn JTable nadat de gebruiker is toegevoegd;
- .fireTableDataChanged();
- .repaint() of .refresh();
- een methode geschreven die aangeroepen wordt na het aanmaken van de gebruiker. Deze maakt connectie met database, haalt alle gebruikers op en voegt die 1 voor 1 toe aan de JTable.

Jammer genoeg werkten al deze suggesties NIET. Heeft iemand van u een idee hoe ik dit kan oplossen?

Alvast bedankt!
 
Hallo,

Ik zou zelf ook sommige van deze opties gebruiken. Het gekke vind ik dat zeker bij de laatste opties het wel goed moet gaan. Als de code goed is haalt hij alle users op.
Ik kan maar aan paar problemen denken:
- User word niet toegevoegd in de database
- Code fout

Als je zeker weet dat 1 wel gebeurd, kan je de code pasten, zodat we er naar kunnen kijken om je te helpen

gr ~mount
 
Beste MouNtant

Heb uiteindelijk zelf de fout gevonden, was inderdaad foute code -_-' stupid me!
Toch bedankt!
 
je werkt met defaultlistmodel
zie
http://www.java2s.com/Code/Java/Swing-JFC/AnexampleofJListwithaDefaultListModel.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();
    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan