【发布时间】:2012-02-16 14:27:12
【问题描述】:
我正在尝试在 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;
}
【问题讨论】:
-
即使您的渲染器非常多余,但它似乎并不是问题的根源。
-
传递给渲染器的数据来自
TableModel,所以很可能就是问题所在。请发布该代码而不是渲染代码 -
您的代码似乎没有调用 table.setValueAt (顺便说一句,渲染器不应该改变表格的内容);所以我想问题在于表格的填充方式
-
另见
FontShower`。
标签: java swing fonts jtable tablecellrenderer