Problem mit TableModel und Spaltennamen
-
Hallo,
ich habe ein eigenes TabelModel geschrieben, was auch soweit funktioniert. Nun habe ich aber das Problem das die Spaltennamen nicht angezeigt werden. Hatt jemand vielleicht eine Idee. Wäre für jede Hilfe dankbar.Grüße Marco
Demo
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JTable; public class test extends JFrame { private JTable table; public test() { // Window-Listener für JDialog [Fenster wird geschlossen] addWindowListener( new WindowAdapter() { public void windowClosing ( WindowEvent e ) { System.exit(0); } } ); TableModel model = new TableModel(); model.setColumnName(0, "Header1"); model.setColumnName(1, "Heaeder2"); model.setValueAt(0, 0, "test"); model.setValueAt(0, 1, "test1"); table = new JTable(model); System.out.println(model.getColumnCount()); //System.out.println(model.getValueAt(0,1)); this.getContentPane().add(table); } public static void main(String[] args) { test app = new test(); app.show(); app.pack(); } }
TableModel
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import javax.swing.table.AbstractTableModel; public class TableModel extends AbstractTableModel { private HashMap data; private HashMap columns; private HashMap columnNames; public TableModel() { data = new HashMap(); columns = new HashMap(); columnNames = new HashMap(); } public Object getValueAt(int row, int col) { HashMap tmp; String tmp2 = ""; tmp2 += row; tmp = (HashMap)data.get(tmp2); if(tmp == null) { return ""; } else { tmp2 = ""; tmp2 += col; return tmp.get(tmp2); } } public int getRowCount() { return data.size(); } public int getColumnCount() { Collection a = columns.values(); int zaehler = 0; Integer k = new Integer(0); Object tmp; for ( Iterator it = a.iterator(); it.hasNext(); ) { tmp = it.next(); k = new Integer(tmp.toString()); if(zaehler < k.intValue()) zaehler = k.intValue(); } return zaehler; } public void setValueAt(int row, int col, Object value) { String tmp2 = ""; tmp2 += row; HashMap tmp = (HashMap)data.get(tmp2); Object h; if(tmp == null) { tmp = new HashMap(); Integer i = new Integer(0); tmp2 = ""; tmp2 += row; h = columns.get(tmp2); if(h != null) i = new Integer(h.toString()); else i = new Integer(1); tmp2 = ""; tmp2 += i.intValue()+1; i = new Integer(tmp2); tmp2 = ""; tmp2 += row; columns.put(tmp2, i); tmp2 = ""; tmp2 += col; tmp.put(tmp2, value); tmp2 = ""; tmp2 += row; data.put(tmp2, tmp); } else { tmp2 = ""; tmp2 += col; tmp.put(tmp2, value); tmp2 = ""; tmp2 += row; data.put(tmp2, tmp); } } public String getColumnName(int col) { String tmp = ""; tmp += col; if(columnNames.get(tmp) == null) tmp = ""; else tmp = columnNames.get(tmp).toString(); return tmp; } public void setColumnName(int col, String name) { String tmp = ""; tmp += col; columnNames.put(tmp, name); }
-
Also ich hab eigentlich keine Ahnung warum das nicht angezeigt wird. So spontan als Java-N00b würd ich mal in deinem TableModel Konstruktor noch n super(); einfügen, vielleicht hilfts ja.
-
Nein dran liegt es leider nicht. Keiner eine Idee?
-
Doch. Der Header wird nur in einer scrollbaren Umgebung angezeigt. Eine JTable ist nicht per se scrollbar. Du musst sie in eine JScrollPane stecken.
Also deinen Code in der test-Klasse von
this.getContentPane().add(table);
nach
this.getContentPane().add(new javax.swing.JScrollPane(table));
abändern. Dann siehst du "Header1" und "Header2".
-
@CengizS
Funktioniert einwandfrei. Vielen Dank für deine Hilfe