Trying to color specific cell in JTable… getTableCellRendererComponent Overide

前端 未结 1 1007
南方客
南方客 2020-12-18 13:04

So I know this may be a duplicate question, but I\'ve looked through many of the ones already on here and none of them seem to work for me, so I thought I would post my own

相关标签:
1条回答
  • 2020-12-18 13:41

    The render is unique for column "Name". You are setting Red as foreground color when row is 3 but you dont reset it for others rows, so when painter is called it always paint red. You have to set red when row is 3 but you also have to reset the original color in other case.

    EDITED: Performed version. Now original foreground color is backed up, and super is used to render like others columns.

               table.getColumn("Name").setCellRenderer(
                new DefaultTableCellRenderer() {
    
            Color originalColor = null;
    
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (originalColor == null) {
                    originalColor = getForeground();
                }
                if (value == null) {
                    renderer.setText("");
                } else {
                    renderer.setText(value.toString());
                }
    
                if (row == 3) {
                    renderer.setForeground(Color.RED);
                } else {
                    renderer.setForeground(originalColor); // Retore original color
                }
                return renderer;
            }
        });
    
    0 讨论(0)
提交回复
热议问题