首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableCellRenderer奇怪的行为

TableCellRenderer奇怪的行为
EN

Stack Overflow用户
提问于 2012-01-23 15:09:48
回答 3查看 400关注 0票数 1

我正在尝试在jtable上实现一个自定义的TableCellRenderer。该表被设置为100行和100列。此表应包含指定字体的所有字形。我的问题是,当表中没有完整的值时,它会将最后一个值放在第一列,直到它到达表的底部。下面我有我的自定义渲染器的代码和一个带有奇怪行为的屏幕截图。任何帮助都会被感谢。

代码语言:javascript
复制
public class FontRenderer extends JLabel implements TableCellRenderer
{
Font desired_font;
Object prec_value;

public FontRenderer(Font f)
{
    desired_font = f;
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex)
{


    setOpaque(true);
    setHorizontalAlignment(SwingConstants.CENTER);
    setBackground(new Color(255, 255, 255));
    if (isSelected)
    {
        if (value == null)
        {
            setText("");
        }
        else
        {
            setText(value.toString());
        }
        setFont(desired_font);
        setBackground(new Color(56, 195, 254));
    }
    if (value == null)
    {
        setText("");
    }
    else
    {
        if(value==null)
            table.setValueAt(null, rowIndex, vColIndex);
        else
        setText(value.toString());
            //table.setValueAt(value.toString(), rowIndex, vColIndex);

    }
    setFont(desired_font);

    return this;
}
}

编辑:这是我填充表的代码。

代码语言:javascript
复制
while (cnt_i < 100) {
    while (cnt_j < 100) {
        if (my_fnt.canDisplay((char) unicode_char) && glyph_count <= total_glyphs) {
            jTable1.setValueAt((char) unicode_char, cnt_i, cnt_j);
            cnt_j++;
            if (glyph_count == total_glyphs) {
                break;
            }
            glyph_count++;
        }
        unicode_char++;
    }
    cnt_i++;
    cnt_j = 0;
}

解决了它。所有人。这就是我填充表的方式。以下代码进行了更改:

代码语言:javascript
复制
while (cnt_i < 100) {
    while (cnt_j < 100) {
        if (my_fnt.canDisplay((char) unicode_char) && glyph_count <= total_glyphs) {
            if (glyph_count == total_glyphs) {
                break;
            }
            else {
                jTable1.setValueAt((char) unicode_char, cnt_i, cnt_j);
                cnt_j++;
                glyph_count++;
            }
        }
        unicode_char++;
    }
    cnt_i++;
    cnt_j = 0;
}
EN

回答 3

Stack Overflow用户

发布于 2012-01-23 15:22:22

1)有关于Unicode字符的,我认为这不是Renderer的工作

2)为JTable设置JTable#Font,而不是为Renderer传递参数

3)如果您想在运行时更改一堆数据,请使用prepareRenderer

4)最重要的是了解如何填充JTable's数据以及如何定义/设置Font(s)

票数 2
EN

Stack Overflow用户

发布于 2012-01-23 15:29:51

我不认为你的问题是CellRenderer ..

不过,我帮你清理了一下

代码语言:javascript
复制
public class FontRenderer extends JLabel implements TableCellRenderer
{
    Font desired_font;
    Object prec_value;

    public FontRenderer(Font f)
    {
        desired_font = f;
    }

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex)
    {
        setOpaque(true);
        setHorizontalAlignment(SwingConstants.CENTER);
        setBackground(new Color(255, 255, 255));
        setFont(desired_font);

        if (value == null)
        {
            setText("");
        }
        else
        {
            setText(value.toString());
        }

        if (isSelected)
        {
            setBackground(new Color(56, 195, 254));
        }

        //what was that for?
        //table.setValueAt(null, rowIndex, vColIndex);

        return this;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-01-23 15:40:43

顺便说一句,canDisplay(int)可以帮助确定特定代码点在给定的Font中是否具有字形。REPLACEMENT CHARACTER是一个方便的占位符,GlyphSet是一个相关的例子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8968240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档