问题
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);
}
}
回答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 :
回答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];
}
来源:https://stackoverflow.com/questions/9647522/setting-column-headers-in-jtable