JTable ImageIcon 和 String

问题描述 投票:0回答:1

我想创建一个

JTable
,其中单元格中可能有
ImageIcon
String
或两者兼而有之。我已经尝试过像
table.setvalue()
这样的解决方案,或者只是将
Icon
添加到
Object Array
来创建
JTable

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);
}
java string swing jtable imageicon
1个回答
0
投票

可能有一个 ImageIcon、字符串或两者都有。

您将需要创建一个自定义对象来存储在 TableModel 中。该对象将包含两个属性:

  1. 文字
  2. 图标

然后您将需要创建一个自定义渲染器(不使用默认渲染器)来显示该对象。

自定义渲染器可能看起来像这样:

class CustomRenderer extends DefaultTableCellRenderer
{
    public CustomRenderer()
    {
        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);

        CustomObject custom = (CustomObject)value;
        setText( custom.getText() );
        setIcon( custom.getIcon() );

        return this;
    }
}

您可以使用以下方法设置单列的渲染器:

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

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

table.setDefaultRenderer(CustomObject.class, new CustomRenderer());
© www.soinside.com 2019 - 2024. All rights reserved.