JTable ImageIcon and String



我想创建一个JTable,其中单元格中可能存在ImageIconString或两者兼而有之。我已经尝试过table.setvalue()之类的解决方案,或者只是将Icon添加到创建JTableObject Array中。

for (int n = 0; n < tableHeight; n++) {
for (int m = 0; m < tableWidth; m++) {
if ((n + m) == labelArray.size()) {
break;
}
if (labelArray.get(n + m).iconMode) {  //iconMode is True if there is an icon instead of line text
data[n][m] = null;
} else {
String text = new String("<html><p>" + labelArray.get(n + m).lineOne + "<br>" + labelArray.get(n + m).lineTwo + "<p></html>");
data[n][m] = text;
}
}
}
table = new JTable(data, columnNames);
renderer = new DefaultTableCellRenderer();
renderer.setHorizontalTextPosition(JLabel.CENTER);
renderer.setHorizontalAlignment(JLabel.CENTER);
for (int n = 0; n < tableWidth; n++) {
table.getColumnModel().getColumn(n).setCellRenderer(renderer);
table.getColumnModel().getColumn(n).setWidth(50);
}

可以有一个ImageIcon,String或两者兼而有之。

您需要创建一个要存储在表模型中的自定义对象。此对象将包含两个属性:

  1. 发短信
  2. 图标

然后,您需要创建自定义渲染器(不使用默认渲染器(来显示此对象。

自定义呈现器可能如下所示:

class IconTextRenderer extends DefaultTableCellRenderer
{
public IconTextRenderer()
{
super();
setHorizontalTextPosition(JLabel.CENTER);
setHorizontalAlignment(JLabel.CENTER);
}
@Override
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
IconText iconText = (IconText)value;
setIcon( iconText.getIcon() );
setText( iconText.getText() );
return this;
}
}

您可以使用以下命令为单个列设置呈现器:

table.getColumnModel().getColumn(???).setCellRenderer( new IconTextRenderer());

或者对于使用自定义类的所有列:

table.setDefaultRenderer(IconText.class, new IconTextRenderer());

最新更新