как установить цвет фона заголовка JTable при выделении ячейки - PullRequest
1 голос
/ 10 марта 2012

Я могу успешно установить цвет фона всего заголовка 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 Ответ

2 голосов
/ 10 марта 2012

Вы можете перейти на JTable:

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

И вы можете предоставить собственный рендерер ячеек для рендеринга заголовков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...