Setting column headers in JTable
44,650
Solution 1
Not sure how good this thing is but you can use DefaultTableModel instead of AbstractTableModel, which extends AbstractTableModel.
Here is the code for example purpose :
package jtable;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
public class TableIcon extends JFrame
{
public TableIcon()
{
ImageIcon backIcon = getImage("/images/bac.png");
ImageIcon exitIcon = getImage("/images/exit.png");
ImageIcon forwardIcon = getImage("/images/forward.png");
String[] columnNames = {"Picture", "Description"};
Object[][] data =
{
{backIcon, "BACK"},
{exitIcon, "EXIT"},
{forwardIcon, "FORWARD"},
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable( model )
{
// Returning the Class of each column will allow different
// renderers to be used based on Class
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
};
ImageIcon icon = new ImageIcon(getClass().getResource("/images/appIcon.png"));
//model.addRow(new Object[]{icon, "Text"});
//model.addRow(data[0]);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}
private ImageIcon getImage(String path)
{
java.net.URL url = getClass().getResource(path);
if (url != null)
return (new ImageIcon(url));
else
{
System.out.println(url);
return null;
}
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
e.printStackTrace();
}
TableIcon frame = new TableIcon();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}
Here is the output :
Solution 2
You must implement getColumnName to do so.
see API
private String[] colNames = new String[] {"first", "second", "third"};
@Override
public String getColumnName(int col) {
return colNames[col];
}
Author by
Soler Mani
Updated on July 09, 2022Comments
-
Soler Mani almost 2 years
I have the following JTable which uses a table model:
http://s17.postimage.org/7zfh3l4lr/Screen_Shot_2012_03_10_at_15_11_31.png
Instead of using, A,B,C,D etc. how can I define my own table names. This is my code
Here is the code for my table model, the frame creates an object from this table model and displays it in a JFrame.
package uk.ac.kcl.inf._4css1pra.spreadsheet; import java.awt.Dimension; import java.util.HashMap; import java.util.Map; import javax.swing.table.AbstractTableModel; /** * @author imdad * */ public class Spreadsheet extends AbstractTableModel{ private Map data = new HashMap(); public int getColumnCount() { return 7; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getRowCount() */ public int getRowCount() { return 250; } public Object getValueAt(int row, int col) { return data.get(new Dimension(row, col)); } public void setValueAt(Object data, int row, int col) { Dimension coord = new Dimension(row, col); this.data.put(coord, data); fireTableCellUpdated(row, col); } }
-
mKorbel about 12 yearsplease edit your code with 1) setColumnNames(), code talking about AbstractTableModel 2) colNames <> col
-
Angelo Fuchs about 12 years@mKorbel to 1) I don't see why it would improve the example. 2) Well, of course colNames <> col. col is an index, colNames is an Array the combination of both returns the name, whats your point? (Sorry if I just don't get it.)
-
mKorbel about 12 yearsbetter would be read OP's code and add required method(s), then I'll up_vote your answer here, maybe suggerstion for use DefaultTableModelwill be better for OP (then both my comments will be deleted)
-
Angelo Fuchs about 12 years@mKorbel I see. I intentionally did not do so. But yeah, using DefaultTableModel would serve the OP fine, the answer of Gagandeep does that well, so I'll leave mine the way it is as a suggestion. Thanks for your input. (and btw, i read the ops code, I even pulled it over from pastebin, see my edit on the original post)
-
nIcE cOw about 12 years@AngeloNeuschitzer : Ahha, it seems, you suggesting overriding the
getColumnName(...)
, that is a good thing too :-) -
Angelo Fuchs about 12 years@GagandeepBali Yeah, I just added the annotation so it seems more clear now what I do.