TableCellRenderer странное поведение Java - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь реализовать пользовательский TableCellRenderer на jtable.таблица установлена ​​на 100 строк и 100 столбцов.Эта таблица должна содержать все глифы для указанного шрифта.Моя проблема заключается в том, что, когда таблица не полностью заполнена значениями, в первом столбце она помещает последнее значение, пока не достигнет нижней части таблицы.Ниже у меня есть код для моего пользовательского рендерера и скриншот со странным поведением.Любая помощь будет оценена.

enter image description here

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

Редактировать: Вот код, где я заполняю таблицу.Ты все.это было то, как я заполнил стол.следующий код имеет изменения:

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

Ответы [ 3 ]

2 голосов
/ 23 января 2012

Я не думаю, что ваша проблема в CellRenderer ..

Но я немного исправил это для вас

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 голосов
/ 23 января 2012

Кроме того, canDisplay(int) может помочь определить, есть ли у конкретной кодовой точки глиф в данном Font. REPLACEMENT CHARACTER - удобный заполнитель, а GlyphSet - связанный пример.

2 голосов
/ 23 января 2012

1) есть около Unicode символов, я думаю, что это не работа для Renderer

2) set JTable # Font для JTable что для передачи параметров для Renderer

3) используйте prepareRenderer, если вы хотите изменить набор данных во время выполнения

4), наиболее важным будет узнать, как вы заполнили JTable'sданные и определить / установить для Font(s)

...