Tabellenzellen editieren

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe eine Tabelle wenn ich jedoch eine Zelle editieren will
wird jedes mal der alte wert wieder eingetragen.

Weiß jemand warum ?

Benutze das TableModel.
 
G

Guest

Gast
So sieht das Model aus

Code:
import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

import org.w3c.dom.views.AbstractView;

public class DatenModel extends AbstractTableModel
{
	private Vector<TableModelListener> listener;
	
	public DatenModel()
	{
		listener = new Vector<TableModelListener>();
	}
	
	public Class getColumnClass(int arg0) 
	{
		return String.class;
	}

	public int getColumnCount() 
	{
		return 0;
	}

	public String getColumnName(int spaltenIndex) 
	{
		return null;
	}

	public int getRowCount() 
	{
		return 30;
	}

	public Object getValueAt(int zeilenIndex, int spaltenIndex) 
	{	
		return null;
	}

	public boolean isCellEditable(int arg0, int arg1) 
	{
		return true;
	}

	public void addTableModelListener(TableModelListener l) 
	{
		listener.add(l);
	}
	
	public void removeTableModelListener(TableModelListener l)
	{
		listener.remove(l);
	}
	
	public void setValueAt(Object object, int zeilenIndex, int spaltenIndex) 
	{
		
	}
	
	public void fireTableCellUpdated(int row, int column)
	{
		
	}
	
	public void fireTableChanged(TableModelEvent e)
	{
		
	}
	
	public void fireTableDataChanged()
	{
		
	}
}
 

PollerJava

Top Contributor
Code:
import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

import org.w3c.dom.views.AbstractView;

public class DatenModel extends AbstractTableModel
{
   private Vector<TableModelListener> listener;
   
   public DatenModel()
   {
      listener = new Vector<TableModelListener>();
   }
   
   public Class getColumnClass(int arg0)
   {
      return String.class;
   }

   public int getColumnCount()
   {
      return 0;     // Du setzt hier die SpaltenAnzahl auf 0, Du hast also keine Spalten??????
   }

   public String getColumnName(int spaltenIndex)
   {
      return null;
   }

   public int getRowCount()
   {
      return 30;
   }

   public Object getValueAt(int zeilenIndex, int spaltenIndex)
   {   
      return null;   // getValueAt(...) liefert null zurück, Du musst hier etwas zurückgeben, sonst hast Du eben Dein Problem
   }

   public boolean isCellEditable(int arg0, int arg1)
   {
      return true;
   }

   public void addTableModelListener(TableModelListener l)
   {
      listener.add(l);
   }
   
   public void removeTableModelListener(TableModelListener l)
   {
      listener.remove(l);
   }
   
   public void setValueAt(Object object, int zeilenIndex, int spaltenIndex)
   {
      
   }
   
   public void fireTableCellUpdated(int row, int column)
   {
      
   }
   
   public void fireTableChanged(TableModelEvent e)
   {
      
   }
   
   public void fireTableDataChanged()
   {
      
   }
}
 
M

Michael...

Gast
Ich kann mir nicht vorstellen, dass mit diesem Model überhaupt eine Tabelle angezeigt wird. Denn hier wird ja die Anzahl der Spalten auf 0 gesetzt.
Anonymous hat gesagt.:
Code:
	public int getColumnCount() 
	{
		return 0;
	}
Ausserdem liefert
Anonymous hat gesagt.:
Code:
	public Object getValueAt(int zeilenIndex, int spaltenIndex) 
	{	
		return null;
	}
ja für jede Zelle null. Das heisst, selbst wenn die Tabelle angezeigt wird, bleiben alle Zellen immer leer.
Grundsätzlich sollte man nur Methoden der Superklasse überschreiben, mit denen man selbst arbeiten möchte.

Weiter muss man, wenn man mit AbstractTableModel arbeitet sich selbst um die Datenspeicherung kümmern. D.h. man speichert die Daten in Arrays, Vectoren o.ä.
 
G

Guest

Gast
Ich kann mir nicht vorstellen, dass mit diesem Model überhaupt eine Tabelle angezeigt wird. Denn hier wird ja die Anzahl der Spalten auf 0 gesetzt.

0 da ich die Tabelle über ein tablecolumnmodel mit Spalten versorge :)


ja für jede Zelle null. Das heisst, selbst wenn die Tabelle angezeigt wird, bleiben alle Zellen immer leer.
Grundsätzlich sollte man nur Methoden der Superklasse überschreiben, mit denen man selbst arbeiten möchte.

Hab die werte rausgenommen bevor ich den quellcode gepostet habe.
Werte sind also vorhanden :)

Weiter muss man, wenn man mit AbstractTableModel arbeitet sich selbst um die Datenspeicherung kümmern. D.h. man speichert die Daten in Arrays, Vectoren o.ä.

bei welchem Model mus ich das denn nicht tun ?
 
M

Michael...

Gast
Kannst ja mal das DefaultTableModel anschauen, das baut auf dem AbstractTableModel auf und kümmert sich selbst um die Daten
 

tfa

Top Contributor
Du solltest dir das Tutorial nochmal durchlesen. Nach ca. einer Stunde (wenn überhaupt so lange) schon zu sagen "Hilft nicht" halt ich für zu kurz.
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
set Value() bleibt bei mir leer.

Ist das das Problem ?
Ohne setValueAt kannst du nix editieren. Irgendwo muss ja der neue Wert abgespeichert werden. Beispiel:
Code:
   public void setValueAt(Object object, int zeilenIndex, int spaltenIndex) {
        List rowData = (List) daten.get(zeilenIndex);
        rowData.set(spaltenIndex, object);
        fireTableCellUpdated(zeilenIndex, spaltenIndex);
    }

Und getValueAt muss die Werte aus derselben Struktur herausholen! ("daten" ist hier eine List von Lists)
Code:
   public Object getValueAt(int zeilenIndex, int spaltenIndex) {
        List rowData = (List)daten.get(zeilenIndex);
        return rowData.get(spaltenIndex);
    }
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben