Spalte wird nicht angezeigt

H3llGhost

Mitglied
Hallo Leute,

ich bin im Moment dabei eine Klasse zuschreiben, welche dynamisch eine JTable anpassen kann dazu habe ich hier im Forum folgende Klassen gefunden:

Code:
public class TableTestRow
{
	private String m_sVorname;
	private String m_sNachname;
	private String m_sStrasse;
	
	/**
	 * Konstruktor
	 *
	 */
	TableTestRow()
	{
	}

	/**
	 * Konstruktor
	 *
	 */
	TableTestRow(	String nachname,
								String vorname,
								String strasse)
	{
		this.m_sVorname = vorname;
		this.m_sNachname = nachname;
		this.m_sStrasse = strasse;
	}

	/**
	 * @return
	 */
	public String getNachname()
	{
		return m_sNachname;
	}

	/**
	 * @return
	 */
	public String getStrasse()
	{
		return m_sStrasse;
	}

	/**
	 * @return
	 */
	public String getVorname()
	{
		return m_sVorname;
	}

	/**
	 * @param string
	 */
	public void setNachname(String string)
	{
		m_sNachname = string;
	}

	/**
	 * @param string
	 */
	public void setStrasse(String string)
	{
		m_sStrasse = string;
	}

	/**
	 * @param string
	 */
	public void setVorname(String string)
	{
		m_sVorname = string;
	}


	/**
	 * Gibt den anzuzeigenden Zelleninhalt aus
	 *
	 * @param columnIndex Die relevante Spalte
	 * @return Der anzuzeigende Zellinhalt als Object
	 */
	public Object getValueAt(int columnIndex)
	{
		switch (columnIndex)
		{
			case 1 :
					return ( this.getVorname() );

			case 2 :
					return ( this.getNachname() );
					
			case 3 :
					return ( this.getStrasse() );
				
			default :
					return null;
		}
	}
}


Code:
public class TableTestTableModel extends DefaultTableModel
{
	private static final long serialVersionUID = -5878188384164466059L;
	private String[] columnNames =
	{	"IP",
		"User",
		"Letzte Aktivität"
	};
	
	TableTestTableModel()
	{
		super();
	}
	
	public boolean isCellEditable(int row, int column) { 
        return false; 
    }
	
	/* (non-Javadoc)
	 * @see javax.swing.table.TableModel#getColumnCount()
	 */
	public int getColumnCount()
	{
			return columnNames.length;
	}

	/* (non-Javadoc)
	 * @see javax.swing.table.TableModel#getColumnName(int)
	 */
	public String getColumnName(int col)
	{
		return columnNames[ col ];
	}
	

	/* (non-Javadoc)
	 * @see javax.swing.table.TableModel#getRowCount()
	 */
	public int getRowCount()
	{
		return getRows().size();
	}

	/* (non-Javadoc)
	 * @see javax.swing.table.TableModel#getValueAt(int, int)
	 */
	public Object getValueAt(int rowIndex, int columnIndex)
	{
		Object objRet = null;
		try
		{
			objRet =
				((TableTestRow) getRows().get(rowIndex)).getValueAt(columnIndex);
		}
		catch (Exception except)
		{
		}

		return (objRet);
	}

	/**
	 * Liefert eine Zeile zurück
	 * @param row der Index der Zeile
	 * @return die Zeile
	 */
	private TableTestRow getRow(int row)
	{
		return (TableTestRow) getRows().get(row);
	}
	
	/**
	 * Die Zeilen des Modells
	 */
	private List<TableTestRow> rows;
	/**
	 * @return
	 */
	public List<TableTestRow> getRows()
	{
		if (rows == null)
		{
			rows = new ArrayList<TableTestRow>();
		}

		return rows;
	}
	
	/**
	 * Fügt eine neue Tabellenzeile hinzu
	 * 
	 * @param newRow
	 */
	public void addRow(TableTestRow newRow)
	{
		getRows().add(newRow);
		fireTableDataChanged();	
	}
}

Diese beiden Klassen rufe ich wie folgt auf:

Code:
	    tabModel = new TableTestTableModel();
	    for (int i = 0; i < 10; i++)
	    	tabModel.addRow(new TableTestRow("lala2016846466543848713L", "lala22016846466543848713L", "lala32016846466543848713L"));
	    clients = new JTable(tabModel);

		clients.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		clients.setCellSelectionEnabled(false);
		clients.setColumnSelectionAllowed(false);
		clients.setRowSelectionAllowed(true);

Das funktioniert auch fast perferkt.
Die erste Spalte wird leider nicht angezeigt und ich kann mir nicht erklären wieso ...
 
Moin,

ich habe jetzt NICHT den gesamten Code durchforstet, aber so aus dem Bauch heraus würde ich vermuten, dass folgendes fehlschlägt :
Java:
public Object getValueAt(int columnIndex)
{
    switch (columnIndex)
    {
        case 1 :
            return ( this.getVorname() );
        case 2 :
            return ( this.getNachname() );
        case 3 :
            return ( this.getStrasse() );
        default :
            return null;
    }
}

IMHO sollte der Index nicht von 1 ... 3 sondern von 0 ... 2 laufen ! ! :)

Gruß
Klaus
 

Neue Beiträge

Zurück