我是Jtable swing中的新手,我想将图像图标设置为Jtable的特定单元格,
所以我尝试了以下代码。
ImageIcon addIcon = new ImageIcon("addIcon.gif"); //addIcon.gif is stored in the resource packaage
table.setModel(new javax.swing.table.DefaultTableModel
(
new Object [][]
{
{
rowNumber, null, null, null,addIcon
},
{
null,null ,"Total" ,"0.0","Get Total"
}
},
new String []
{
"No.", "Item", "Weight", "Amount","#"
}
)
{
@Override
public Class<?> getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
}
);
但是我没有使用Icon,而是获得了#34; addIcon.gif&#34;该jTable单元格中的字符串。 我在这里犯的错是什么。
请帮忙。
答案 0 :(得分:1)
您需要实现自己的TableCellRenderer:https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableCellRenderer.html。表模型只保存图标,没有绘图。绘图由单元格渲染器完成(用于分隔UI和数据)。另请参阅有关自定义单元格渲染器的JTable教程:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer
答案 1 :(得分:1)
您无法覆盖getColumnClass(...)
方法,因为该类将用于确定表格中给定列的所有行的渲染器。
对于特定的单元格渲染,您可以覆盖表格的getCellRenderer(...)
方法:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.table.*;
public class SSCCE extends JPanel
{
public SSCCE()
{
ImageIcon addIcon = new ImageIcon("copy16.gif");
String[] columnNames = {"No.", "Item", "Weight", "Amount","#"};
Object[][] data =
{
{"123", null, null, null, addIcon},
{null, null ,"Total" ,"0.0", "Get Total"}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model)
{
@Override
public TableCellRenderer getCellRenderer(int row, int column)
{
int modelColumn = convertColumnIndexToModel(column);
if (modelColumn == 4 && row == 0)
{
return getDefaultRenderer( Icon.class );
}
else
return super.getCellRenderer(row, column);
}
};
add( new JScrollPane( table ) );
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new SSCCE() );
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
这是SSCCE
的示例。所有问题都应包括SSCCE以证明您的问题。