# DefaultTableModel Spalten ausblenden



## ODW (8. Mrz 2010)

Hallo liebe Java-Gemeinde
Ich habe hier ein kleines Problem, mit dem DefaultTableModel. Ich möchte das die ID in der Ersten Spalte ausgeblendet wird, allerdings brauche ich die ID für spätere Zwecke. Muss dazu sagen, dass ich noch relativ neu bin in der Programmierung und irgendwie grad nicht weiterkomme. Für jede Hilde bin ich dankbar.
Hier mein Code:

```
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.table.DefaultTableModel;

public class RecipeOverviewFill extends DefaultTableModel
{

	private static final long serialVersionUID = 1L;

	Connection con = null;
	
	public RecipeOverviewFill()
	{
		con = DataBaseConnector.getConnection();
		
		try
		{
			Statement smt = con.createStatement();
			ResultSet rs = smt.executeQuery("SELECT * FROM rezepte");

			ResultSetMetaData rsmd = rs.getMetaData();
			int clmCnt = rsmd.getColumnCount();

			try
			{
				rs.first();
				rs.last();
				int rowCnt = rs.getRow();
				rs.first();

				Object[][] odata = new Object[rowCnt][clmCnt];
				Object[] clmHeaders = new Object[clmCnt];
				
				char head1;
				char tmp;
				String head2="";

				for (int i = 1; i <= clmCnt; i++)
				{
					if (rsmd.getColumnName(i).matches("rezeptID"))
					{
						clmHeaders[i - 1] = "Rezept Nr.";
					} else
					{
								head1 = rsmd.getColumnName(i).toUpperCase().charAt(0);
								for (int j=1;j<rsmd.getColumnName(i).length();j++)
								{
									tmp=rsmd.getColumnName(i).toLowerCase().charAt(j);
									head2+=tmp;
								}
								clmHeaders[i - 1] =head1+head2;
								head2="";
					}
				}

				int row = 0;
				do
				{
					for (int j = 1; j <= clmCnt; j++)
					{
						odata[row][j - 1] = rs.getString(j);
					}
					row++;
				} while (rs.next());

				this.setDataVector(odata, clmHeaders);

			} catch (SQLException e1)
			{
				e1.printStackTrace();
			}

			this.fireTableStructureChanged();
			this.fireTableDataChanged();

		} catch (SQLException e)
		{
			System.err.println("SQL-Error:" + e.getMessage());
			System.exit(1);
		}

	}
}
```


----------



## SlaterB (8. Mrz 2010)

erste Spalte wird schwer ohne eigenes Model, aber wenn du die Id in die letzte Spalte setzt und die Liste der Column-Überschriften um 1 kürzt, dann erscheint die letzte Spalte nicht in der GUI,
das DefaultTableModel kannst du dann allerdings auch kaum mehr um die Daten der letzten Spalte befragen..

dann die Daten nochmal in der Klasse RecipeOverviewFill ablegen und per neue Methoden die Id abfragen 
oder gleich weitere TableModel-Methoden implementieren, getValueAt(), & Co.,
dann kannst du alles steuern (Spalte+1 zurückgeben usw.)
How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

----

wenn du die Connection con nur einmal brauchst, dann lieber nur als lokale Variable im Konstrukor, 
sonst wird sie vielleicht unnötig lang offen gehalten oder so


----------



## ODW (10. Mrz 2010)

Danke für die Antwort, habe nun etwas gefunden, wie ich es schaffen kann auszublenden


```
this.t_topleft.getColumn([I]name[/I]).setMinWidth(0);
this.t_topleft.getColumn([I]name[/I]).setMaxWidth(0);
```


----------



## SlaterB (10. Mrz 2010)

einfallsreich


----------

