java - 表渲染器在 Java 中无法正常工作

标签 java swing jtable rendering tablecellrenderer

我阅读了很多文章,终于按照我的要求得到了我的 JTable 渲染,但问题是当用户滚动表格时,jtable 的其他一些隐藏部分也被着色,如下图所示

enter image description here

当用户滚动表格时,其他部分也像这样着色

enter image description here

为什么会这样?我读了很多文章,它们都显示了完全相同的东西,但是这...

这是我的代码

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

所有文章都展示了这种在条件基础上呈现自定义行的方式。我的代码有什么问题?感谢您的支持。

最佳答案

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展示如何根据该行中的值呈现该行。

关于java - 表渲染器在 Java 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472604/

相关文章:

java - 如何使 JTable 自动调整大小和水平滚动?

java - 无法打开调试端口 : java.net.socketexception "Connection refused"- Android Studio

java - 在Java中使用JSON文件解析base64

java - android 给字符串数组赋值

Java Swing : getAncestorOfClass() not working as expected

java - 该功能与 JTable 模型配合使用是否正常?

java - 在 Java 桌面应用程序中打开 PDF

java - 如何创建一个包含具有多个值的对象的 JList?例如价格、重量、颜色等

java - 通过setDataVector函数更新JTable数据

java - 编辑 JTable 时行为不一致