gpt4 book ai didi

java - JTable 自定义 TableCellRenderer 显示图像

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

我有一个 JTable,我想根据单元格的内容显示图像,我知道为了实现这一点,我必须实现我自己的自定义单元格渲染器,但是,一旦第一个图像绘制在单元格上,程序将图像绘制在其他单元格上,无论其内容如何。我已经尝试了几乎所有方法,也在互联网上搜索解决方案,但都无济于事。这是我的代码:

public class GameBoard extends JTable
{
public GameBoard()
{
super(new GameBoardModel());
setFocusable(false);
setCellSelectionEnabled(true);
setRowHeight(26);

TableColumn column = null;
for (int i = 0; i < getColumnCount(); i++)
{
column = getColumnModel().getColumn(i);
column.setPreferredWidth(26);
}

setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setDefaultRenderer(Object.class, new CellRenderer());
}

private class CellRenderer extends DefaultTableCellRenderer
{
private CellRenderer()
{
setHorizontalAlignment(JLabel.CENTER);
}

@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column)
{
if (value.toString().equals("X"))
{
URL test = getClass().getResource(resources/icon.png");
setIcon(new ImageIcon(test));
}
else
setText(value.toString());

return this;
}
}

如果我在这些方面做了一些愚蠢的事情,请原谅我。 。 .

提前致谢,之字形。

最佳答案

不要忘记调用:

super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

在方法的开头,以便您获得渲染器的默认设置。

如果上述方法不能解决问题,那么您的代码可能需要类似于:

if (value.toString().equals("X"))
{
URL test = getClass().getResource(resources/icon.png");
setIcon(new ImageIcon(test));
setText("");
}
else
{
setIcon(null);
setText(value.toString());
}

此外,您永远不应该在渲染器中读取图像。渲染会被多次调用,因此您不想每次都读取图像。在类的构造函数中读取图像。

关于java - JTable 自定义 TableCellRenderer 显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782318/

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