0

我正在使用自定义 CellRenderer(TableCellRenderer 的一个实例)来呈现下面描述的 CLOSE 列的单元格。我已经为表格的 setSelectionBackGround 设置了一种颜色,但是该列的背景颜色的单元格在选择时不会被绘制。请向我提供任何见解,对此我将不胜感激。

在此处输入图像描述

这是我的 TablecellRenderer 类

class LabelRenderer extends JLabel implements TableCellRenderer {

Font f;
Color selectionBG;    
Color upDirection;

LabelRenderer(){
    super();
    f=new java.awt.Font("Trebuchet MS", 0, 12);
    selectionBG = new java.awt.Color(204, 255, 255);
    upDirection= new Color(0,102,0);
}


@Override
public Component getTableCellRendererComponent(   JTable table, Object value, boolean isSelected, boolean hasFocus,  int row, int column) {
    //structure of passing array (value)
    // new Object[]{boolean direction, String close (change%)}

    Object arr[] = (Object[])value;

    Boolean direction = (Boolean)arr[0];

    if( direction )
        this.setForeground(upDirection);//GREEN
    else
        this.setForeground(Color.red);

    this.setText(arr[1].toString());
    this.setFont(f);


    return this;
}

}

4

2 回答 2

2

您的渲染器扩展JLabel默认情况下不是不透明的。您可以setOpaque(true)在渲染器中执行。或者,您可以扩展DefaultTableCellRenderer默认情况下不透明的内容。例如:

在此处输入图像描述

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class TableBgDemo {
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("TableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Object[][] rows = { { "Column 1", "Column 2" },
                { "Column 1", "Column 2" }, { "Column 1", "Column 2" },
                { "Column 1", "Column 2" } };

        Object[] columns = { "Column 1", "Column 2" };

        DefaultTableModel model = new DefaultTableModel(rows, columns);

        JTable table = new JTable(model);
        table.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());
        table.setSelectionBackground(Color.CYAN);
        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setVisible(true);
    }

    static public class MyRenderer extends DefaultTableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            Component c = super.getTableCellRendererComponent(table, value, isSelected,
                    hasFocus, row, column);
            c.setForeground(Color.RED);
            return c;
        }
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
于 2013-04-27T17:47:18.387 回答
2

我正在使用自定义 CellRenderer(TableCellRenderer 的一个实例)来呈现下面描述的 CLOSE 列的单元格。我已经为表格的 setSelectionBackGround 设置了一种颜色,但是该列的背景颜色的单元格在选择时不会被绘制。请向我提供任何见解,对此我将不胜感激。

问题是由两个错误引起的

  1. 你的渲染器,不要使用这个代码,这里有一些优秀的代码,(我会使用prepareRenderer for RowRenderer)

  2. 永远不要设置,修改,添加来自模型的值,意思是代码行this.setText(arr[1].toString());,渲染器是关于荧光笔,装饰器

于 2013-04-27T17:49:45.600 回答