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


Anmelden zum Antworten