0

我有一个 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;
    }
}

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

在此先感谢,齐格。

4

1 回答 1

4

不要忘记调用:

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());
}

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

于 2013-05-28T01:01:39.573 回答