DefaultCellRenderer () перестает работать, когда ширина столбца = 0 - PullRequest
0 голосов
/ 28 октября 2018

Итак, дело в том, что у меня есть JTable, который окрашивает строки в оранжевый цвет, когда данные в одном из столбцов 'true' (используя класс, который расширяет DefaultCellRenderer), проблема в том, что я не хочу показывать этот столбец, поэтому я попытался удалить его или установить его ширину 0, но когда я это сделал, он больше не выделяет строку оранжевым цветом. Есть ли способ сделать это или всегда нужно показывать информацию?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

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

 public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {

      // Get default renderer from the table

    TableCellRenderer renderer = table.getDefaultRenderer(table.getColumnClass(column));
    Component comp = renderer.getTableCellRendererComponent(table, value,
        isSelected, hasFocus, row, column);

    if (value.equals("true") && row == 1 && col== 1){
       comp.setBackground("YOUR COLOR");
    }
}
0 голосов
/ 28 октября 2018

Я пытался удалить его или установить его ширину на 0, но когда я это сделал, он больше не выделяет строку оранжевым цветом

Я думаю, потому что ширина равна 0,визуализировать нечего, поэтому средство визуализации никогда не вызывается.

В любом случае, не используйте ширину ячейки, равную 0. Когда вы перемещаетесь по таблице, этот столбец все еще будет в фокусе, но пользователь выиграл 'Я знаю, что он имеет фокус, который запутает пользователя.

Вместо этого, если вы хотите скрыть столбец, удалите TableColumn из TableColumnModel.Вы получаете TableColumnModel из JTable, используя метод getColumnModel().Удаление столбца из модели просто препятствует отображению столбца, но данные по-прежнему содержатся в TableModel.

У меня есть JTable, который окрашивает строки в оранжевый цвет, когда данные в одном из столбцовis 'true'

Вы можете переопределить метод prepareRenderer(...) JTable, чтобы сделать это легко.Это будет работать, даже если у вас есть столбцы с различными типами данных, поэтому нет необходимости создавать несколько средств визуализации.

Основная логика:

JTable table = new JTable(...)
{
    public Component prepareRenderer(
        TableCellRenderer renderer, int row, int column)
    {
        Component c = super.prepareRenderer(renderer, row, column);

        if (!isRowSelected(row))
        {
            c.setBackground(getBackground());
            int modelRow = convertRowIndexToModel(row);
            boolean highlight = (Boolean)getModel().getValueAt(modelRow, ???);
            if (highlight) c.setBackground(Color.ORANGE);
        }

        return c;
    }
};

Извлечение Отображение строки таблицы для получения дополнительной информации и рабочего примера.Пример на вкладке «Данные» делает то, что вы хотите.

...