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

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) {
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;
}解决了它。所有人。这就是我填充表的方式。以下代码进行了更改:
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;
}发布于 2012-01-23 15:22:22
1)有关于Unicode字符的,我认为这不是Renderer的工作
2)为JTable设置JTable#Font,而不是为Renderer传递参数
3)如果您想在运行时更改一堆数据,请使用prepareRenderer
4)最重要的是了解如何填充JTable's数据以及如何定义/设置Font(s)
发布于 2012-01-23 15:29:51
我不认为你的问题是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;
}
}发布于 2012-01-23 15:40:43
顺便说一句,canDisplay(int)可以帮助确定特定代码点在给定的Font中是否具有字形。REPLACEMENT CHARACTER是一个方便的占位符,GlyphSet是一个相关的例子。
https://stackoverflow.com/questions/8968240
复制相似问题