选择单元格时如何设置JTable标题背景颜色

时间:2012-03-10 13:43:22

标签: java swing jtable

我可以成功设置整个JTable标题的背景颜色。

通常,这看起来像这样:

m_table.getTableHeader().setBackground(new Color(205,209,235));

我遇到的问题是,当选择一个单元格时,我有ListSelectionListener ...

我想将标题中当前选定列的背景设置为另一种颜色。 (不是当前单元格的背景,这很容易)

更新

我创造了这个:

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

import com.ee.common.StringUtil;

public class myHeaderRenderer extends 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 != null ) 
        {
            if ( isSelected ) {
                table.getTableHeader().setBackground(Color.orange);
            }
            else {
                table.getTableHeader().setBackground(new Color(205,209,235));
            }
        }
        return null;
    }

}

我试着像这样设置:

class WorksheetTable extends JTable implements EEObjectSource, EEObjectTarget {
    public WorksheetTable(WorksheetTableModel model) {
        super(model);
        setTableHeader(new EditableJTableHeader(getColumnModel()));
    }
    @Override
    public void createDefaultColumnsFromModel() {
        super.createDefaultColumnsFromModel();
        setTableHeader(new EditableJTableHeader(getColumnModel()));
        getTableHeader().setToolTipText("Double Click to Edit, Right Click for more options");
        for (int i=0; i<getColumnCount(); i++) {
            getColumnModel().getColumn(i).setPreferredWidth(150);
            getColumnModel().getColumn(i).setWidth(150);
            getColumnModel().getColumn(i).setHeaderRenderer(new myHeaderRenderer());
        }

当表格第一次描绘时,我得到了运行时空指针......遗漏了一些傻话......

1 个答案:

答案 0 :(得分:2)

你可以继续使用JTable:

 jTable.getColumModel().getColumn(columnIndex).setHeaderRenderer()

您可以提供自己的单元格渲染器来渲染标题。