如何在JTable列中设置图标?

我能够设置列的标题,但无法在JTable的第一列的所有行中设置图标。

public class iconRenderer extends DefaultTableCellRenderer{ public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){ imageicon i=(imageicon)obj; if(obj==i) setIcon(i.imageIcon); setBorder(UIManager.getBorder("TableHeader.cellBorder")); setHorizontalAlignment(JLabel.CENTER); return this; } } public class imageicon{ ImageIcon imageIcon; imageicon(ImageIcon icon){ imageIcon=icon; } } 

以及我的BuildTable()方法中的以下行。

  public void SetIcon(JTable table, int col_index, ImageIcon icon){ table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer()); table.getColumnModel().getColumn(col_index).setHeaderValue(new imageicon(icon)); } 

我们如何为第一列的所有行设置它? 我已尝试使用for循环,但还没有得到行迭代来设置图标。 或者还有其他方法吗?

无需创建自定义渲染。 JTable已经支持Icon渲染器。 你只需告诉表使用这个渲染器。 这是通过覆盖表模型的getColumnClass(…)方法完成的:

 import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class TableIcon extends JPanel { public TableIcon() { Icon aboutIcon = new ImageIcon("about16.gif"); Icon addIcon = new ImageIcon("add16.gif"); Icon copyIcon = new ImageIcon("copy16.gif"); String[] columnNames = {"Picture", "Description"}; Object[][] data = { {aboutIcon, "About"}, {addIcon, "Add"}, {copyIcon, "Copy"}, }; DefaultTableModel model = new DefaultTableModel(data, columnNames) { // 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(); } }; JTable table = new JTable( model ); table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane scrollPane = new JScrollPane( table ); add( scrollPane ); } private static void createAndShowGUI() { JFrame frame = new JFrame("Table Icon"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new TableIcon()); frame.setLocationByPlatform( true ); frame.pack(); frame.setVisible( true ); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } } 

您只是使用iconRenderer来渲染标题。 同时将Column的Cell Reneder设置为iconRenderer的实例。 在列上调用setCellRenderer

http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumn.html#setCellRenderer(javax.swing.table.TableCellRenderer

附注:Java编码标准指定类名应以大写字母开头,因此iconRenderer应该是IconRenderer