我阅读了很多文章,最后根据我的要求得到了我的JTable渲染,但问题是当用户滚动表时,jtable的其他一些隐藏部分也是彩色的,如下图所示
当用户滚动表格时,其他部分也会像这样着色
为什么会这样?我阅读了很多文章,并且所有文章都显示了完全相同的内容,但是......
这是我的代码
JTable table = new JTable()
{
public boolean isCellEditable(int rowIndex, int colIndex)
{
return false;
}
};
(DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer())
.setHorizontalAlignment(JLabel.CENTER);
table.setModel(new DefaultTableModel(new Object [][] {}, Columns));
table.setRowHeight(25);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getColumnModel().removeColumn(table.getColumnModel().getColumn(0));
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
{
setBackground(new Color(246,137,137));
}
return this;
}
});
JScrollPane areaScrollPane = new JScrollPane(table);
areaScrollPane.setPreferredSize(new Dimension(width, height));
MyPanel.add(areaScrollPane);
所有文章都显示了这种在条件库上呈现自定义行的方法。我的代码有什么问题?感谢您的支持。
答案 0 :(得分:5)
if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
{
setBackground(new Color(246,137,137));
}
所有单元格都使用相同的渲染器,因此一旦设置了背景,它将适用于所有单元格。所以,我认为你需要这样的东西:
if(!table.getModel().getValueAt(row, 10).toString().equals("true"))
{
setBackground(new Color(246,137,137));
}
else
setBackground( table.getBackground() );
您还应添加代码以确保未选中单元格,以便可以绘制默认选择颜色。
您也可以覆盖JTable的prepareRenderer(...)
方法,而不是使用自定义渲染器。 Table Row Rendering显示如何根据该行中的值呈现行。