我想在jtable上實現一個自定義的TableCellRenderer。該表被設置爲100行和100列。該表應該包含指定字體的所有字形。我的問題是,當表格沒有完全填充值時,在第一列上放置最後一個值,直到它到達表格的底部。下面我有自定義渲染器的代碼和具有奇怪行爲的屏幕截圖。任何幫助都會有所幫助。TableCellRenderer奇怪的行爲java
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;
}
即使您的渲染器非常冗餘,它似乎不是您的問題的根源。 – stryba
傳遞給您的渲染器的數據來自'TableModel',所以最有可能是問題所在。請發佈該代碼,而不是渲染代碼 – Robin
您的代碼似乎並沒有調用table.setValueAt(btw渲染器不應該改變表格的內容);所以我猜這個問題是以表格填充的方式 –