Daten werden in JTable nicht angezeigt:(

  • Themenstarter Themenstarter Lender
  • Beginndatum Beginndatum
L

Lender

Gast
Hallo zusammen,

ich hab ein Problem. Ich habe Daten in einem Object [][]. Die stehen sich drin usw, aber leider zeigt er mir diese nicht in mein Jtable an.

Welches fire... muss ich verwenden, im mom verwende ich dieses :

fireTableDataChanged();

Java:
 public void holeDaten(){
     	list = (ArrayList<VerantwortlicherEntity>) delegate.suchenallerVerantwortlicher();
     	for(VerantwortlicherEntity entity:list){
     		addRow(entity, row);
     		row++;
     	}  	
     	fireTableDataChanged();
    }

Java:
 public void addRow(VerantwortlicherEntity entity, int positionRow){
		 addRow(positionRow);
		 data[positionRow][COL_POS_NAME] = name;
		 data[positionRow][COL_POS_AKTIV]= entity.getAkiv();
		 data[positionRow][COL_POS_SORT] = entity.getSortierung();
 
Hallo.
Das
Code:
fireTableDataChanged()
erkennt - soweit ich weiß - nicht, wenn neue Zeilen oder Spalten hinzugekommen sind. Dafür solltest du die Methode
Code:
fireRowsInseted()
benutzen. Oder ein
Code:
fireTableStructureChanged()
, das lädt glaube ich die ganze Tabelle neu.
(Dies sind die Methoden aus AbstractTableModel, ich nehme an, dass du dich darauf beziehst.)
 
also ich verwende fireTableDataChanged(), wenn nur die Row-Anzahl geändert wird, ohne Änderung der Spalten

ob das ganze funktioniert hängt vom Gesamtverhalten ab, Object [][] und dieser doppelte addRow()-Aufruf klingen verdächtig,
am besten ein komplettes kleines Testprogramm mit Testdaten posten, möglichst kurz, nur eine Spalte usw.
 
Java:
public class VerantwortlicherTableModel extends AbstractTableModel {
    Object[][] objects = new Object[1][3];
    private StammdatenDelegate delegate = StammdatenDelegate.getInstance();
    ArrayList<VerantwortlicherEntity> list = new ArrayList<VerantwortlicherEntity>();
    private final static Logger log = Logger.getLogger( VerantwortlicherTableModel.class );
    
    int COL_POS_NAME=0;
    int COL_POS_AKTIV=1;
    int COL_POS_SORT=2;
    
    int row=0;
    
    public void holeDaten(){
     	list = (ArrayList<VerantwortlicherEntity>) delegate.suchenallerVerantwortlicher();
     	for(VerantwortlicherEntity entity:list){
     		addRow(entity, row);
     		row++;
     	}  	
    }
    private Object[][] data = new Object[][]{};
    
    
    public String getColumnName(int pos) {
        String[] cols = new String[]{
            "Name", "Aktiv", "Sotierung"
        };
        return cols[pos];
    }
 
    public int getRowCount() {
    	return data.length;
    }
    public int getColumnCount() {
        return 3;
    }
    public boolean isCellEditable(int row, int column) { 
        return true ; 
    } 

	 public void addRow(int position) {
	        position = Math.max(0, Math.min(data.length, position));
	        Object[][] newObjects = new Object[data.length + 1][];
	
	        
	        System.arraycopy(data, 0, newObjects, 0, position);
	        System.arraycopy(data, position, newObjects, position + 1,
	            data.length - position);

	        newObjects[position] = new Object[getColumnCount()];
	        data = newObjects;

	        fireTableRowsInserted(position, position);
	    }
	 
	 public void addRow(VerantwortlicherEntity entity, int positionRow){
		 addRow(positionRow);
		 String name = entity.getName();
		 log.debug("addRow name=" + name);
		 data[positionRow][COL_POS_NAME] = name;
		 data[positionRow][COL_POS_AKTIV]= entity.getAkiv();
		 data[positionRow][COL_POS_SORT] = entity.getSortierung();
		 
		 //fireTableCellUpdated(positionRow,COL_POS_NAME);
		 //fireTableCellUpdated(positionRow,COL_POS_AKTIV);
		 //fireTableCellUpdated(positionRow,COL_POS_SORT);
	 }
    
	 	//public Object getValueAt(int row, int column) {
	      //  return list.get(row)[column];
	 	//}


    	public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        }
    	public void deleteRow(int positionRow) {
            list.remove(positionRow);
   		 	fireTableRowsUpdated(positionRow-1, positionRow);         
    }

		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {
			// TODO Auto-generated method stub
			return null;
		}
		

       }
 
also mit
Java:
 public Object getValueAt(int rowIndex, int columnIndex) {
            // TODO Auto-generated method stub
            return null;
        }
kann ja auch nichts angezeigt werden, so viel steht fest,

hier ein lauffähiges Beispiel, welches nach wenigen Sekunden automatisch neue Daten anzeigt

generell empfehle ich, auf das umständliche Array mit SystemCopy zu verzichten,
verwalte nur eine Liste der Daten und greife von getValueAt() auf die Liste zu

Java:
public class TestGUI
    extends JFrame
{
    public TestGUI()
        throws Exception
    {
        VerantwortlicherTableModel m = new VerantwortlicherTableModel();

        JTable t = new JTable();
        t.setModel(m);
        add(t);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setVisible(true);

        Thread.sleep(1000);
        m.holeDaten();
        Thread.sleep(1000);
        m.holeDaten();
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }

}


class VerantwortlicherTableModel
    extends AbstractTableModel
{
    Object[][] data = new Object[0][0];
    List<String> list;

    int COL_POS_NAME = 0;
    int row = 0;

    public void holeDaten()
    {
        list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");

        for (String entity : list)
        {
            addRow(entity, row);
            row++;
        }
    }

    public String getColumnName(int pos)
    {
        String[] cols = new String[]
            {"Name"};
        return cols[pos];
    }

    public int getRowCount()
    {
        return data.length;
    }

    public int getColumnCount()
    {
        return 1;
    }

    public boolean isCellEditable(int row, int column)
    {
        return true;
    }

    public void addRow(int position)
    {
        position = Math.max(0, Math.min(data.length, position));
        Object[][] newObjects = new Object[data.length + 1][];

        System.arraycopy(data, 0, newObjects, 0, position);
        System.arraycopy(data, position, newObjects, position + 1, data.length - position);

        newObjects[position] = new Object[getColumnCount()];
        data = newObjects;
    }

    public void addRow(String entity, int positionRow)
    {
        addRow(positionRow);
        System.out.println("addRow name=" + entity);
        data[positionRow][COL_POS_NAME] = entity;
        fireTableDataChanged();
    }


    public void setValueAt(Object value, int row, int col)
    {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }

    public void deleteRow(int positionRow)
    {
        throw new RuntimeException("keine Zensur hier");
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex)
    {
        return data[rowIndex][columnIndex];
    }
}
 

Zurück
Oben