gpt4 book ai didi

java - 具有两种数据类型的 JTable 单元格

转载 作者:行者123 更新时间:2023-12-01 08:14:22 25 4
gpt4 key购买 nike

我在 JTable 中有一个列,它应该显示两种类型:字符串或 ImageIcon,而不是两者。该列中的每个单元格都有自己的计算数据的线程。一开始,我在每个单元格中放置一个图像(如等待 Logo ),然后用一串计算数据替换(而不是附加)该图像。我尝试扩展默认的 TableCell 渲染器,但它显示像对象地址(javax.swing.ImageIcon@342...)这样的图像,然后用字符串替换。另一种变体,它正确显示图像,但用空字符串替换它(或者它不可见?)。

如何设置才能使表格根据类型正确显示单元格内容?

这是我现在所拥有的:

class IconAndStringRenderer extends DefaultTableCellRenderer {

private static final long serialVersionUID = 3606788739290618405L;

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (value instanceof Icon) {

setIcon((Icon) value);
setText("");
}
return this;
}
}

这是 JTable:

表=新的JTable(模型){

        private static final long serialVersionUID = 8058795799817761161L;

public Class<?> getColumnClass(int column) {
if (column == TARGET_COLUMN)
return ImageIcon.class;
else
return super.getColumnClass(column);
}
};

还有几个问题:

  1. 如何设置,以便文本替换图像,而不是在图像后面写入文本(即使它不可见);

  2. 如何设置文本颜色,我会使用setForebackground(Color c),但是如果我使用它,图像不会显示。

  3. 是否可以使其与 Jlabel 一起使用?在修改单元格的线程中设置所需的Jlabel(带有图像或文本),只需setValueAt(标签,行,列);

最佳答案

您需要一个可以理解您使用的两种类型的自定义渲染器。

例如

public class IconAndStringRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (value instanceof Icon) {
setText("");
setIcon((Icon) value);
}
return this;
}
}

尝试将此类设置为您的列渲染器

关于java - 具有两种数据类型的 JTable 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com