Изменить цвет ячейки таблицы в Java - PullRequest
4 голосов
/ 06 мая 2010

Я прочитал и реализовал это Изменение цвета ячейки JTable

Что я хотел бы знать, как на самом деле использовать этот код? Я просто хочу изменить цвет ячейки таблицы при нажатии на нее.

Ответы [ 3 ]

8 голосов
/ 06 мая 2010

В коде, на который вы ссылаетесь, у вас есть собственный CellRenderer.

После того, как вы добавили его в таблицу, все, что вам нужно, это выполнить форматирование в соответствующем месте:

class CustomRenderer extends DefaultTableCellRenderer 
{
    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);

        // Formatting here

        return c;
    }
}

DefaultTableCellRenderer - это не что иное, как компонент, который будет использоваться в JTable для рисования ячеек. Чтобы быть более точным, в этом случае компонент является JLabel (вы можете увидеть это, проверив источники из DefaultTableCellRenderer).

Таким образом, все, что вам нужно сделать, это выполнить объект "c" (или "this", поскольку метод на самом деле каждый раз возвращает один и тот же компонент: сам). Например, c.setBackground() позволит вам установить цвет фона.

Метод getTableCellRendererComponent(), который переопределяется, будет вызываться для каждой ячейки JTable с параметрами, сообщающими вам о контексте. Вы знаете таблицу, строку, столбец, значение, которое должно отображаться, а также знаете, выбрана ли ячейка или нет, что может помочь в вашем случае:

if (selected)
    c.setBackground(Color.YELLOW);

Чтобы пойти дальше, обратите внимание, что поскольку вы переопределяете класс DefaultTableCellRenderer и используете его собственный метод, вы уже выполнили некоторое форматирование, например, цвет фона, который приведен в таблице. Таким образом, вам нужно только определить свой собственный цвет, когда вам нужно. Если нет, вам придется позаботиться обо всех случаях, поскольку, поскольку используется один и тот же компонент, вы заканчиваете набор цветов один раз, а затем применяете его ко всем последовательным ячейкам, потому что ничего не было бы сделано для его изменения.

Я рекомендую вам прочитать источники из DefaultTableCellRenderer (и его использования в JTable), если вы хотите узнать больше о том, как это делается и используется.

2 голосов
/ 07 мая 2010

Означает ли это, что цвет ячейки меняется навсегда, или он сбрасывается после нажатия на другую ячейку.

Если вы просто хотите временно изменить цвет, тогда проще всего использовать концепции, представленные в Отображение строк таблицы , чтобы вам не приходилось создавать несколько средств визуализации для каждого типа данных.

Если вы хотите, чтобы цвет ячейки был постоянным, тогда он гораздо сложнее, потому что теперь вам нужно сохранить данные для каждой ячейки, которые должны иметь разные цвета. Опять же, самый простой подход - использовать подход сверху, а затем, возможно, сохранить набор всех цветных ячеек.

0 голосов
/ 11 января 2013

Я тоже боролся, когда хотел покрасить конкретную ячейку в JTable.Вы можете создать собственный рендер ячейки таблицы и отправить строку / столбец в виде параметров:

class CustomRenderer extends DefaultTableCellRenderer {
    int col; 
    int row;
    public CustomRenderer (int col, int row) 
    {
       this.col = col;
       this.row = row;
    }
    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);

        setForeground( (column == this.col && row == this.row) 
                                   ? Color.red : Color.black );

        return c;
    }
}

table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer(0, 1);
table.getColumnModel().getColumn(1).setCellRenderer(new CustomRenderer(1, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...