Раскраска определенной ячейки в столбце внутри JTable - PullRequest
1 голос
/ 11 марта 2012

Хорошо, я пытался сделать это в течение последних часов росы, и это становится безнадежным.

Итак, я хочу применить визуализацию ячейки ко 2-му столбцу.

stockTable.setCellRender(jtSpread.getColumnModel().getColumn(1));

Вызывается метод setCellRender, который имеет следующий код:

public void setCellRender(TableColumn column)
{
    column.setCellRenderer(new cellRenderer(data, rows));
}

Мой класс CellRenderer имеет следующий код:

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

  for(int i = 0; i < rows; i++) {
      if(row == i && column == 2) {

      }
  }
  return this;
}

Вышесказанное неполно и в полном беспорядке. Моя цель состоит в том, чтобы проверить каждую ячейку на наличие условия, если true, то я бы вернул метку с передним планом зеленого цвета. Если false, верните метку с передним планом красного цвета. Я хочу проверить каждую ячейку в столбце, одну за другой, и каждое условие является специфическим для каждой ячейки.

РЕДАКТИРОВАТЬ: В отношении каждой ячейки, имеющей свое собственное состояние, например, для.

Первая ячейка имеет значение 600, и я хочу проверить массив [0], если содержимое массива [0] выше, я хочу, чтобы ячейка была зеленой, в противном случае - красной.

Вторая ячейка имеет значение 626, и я хочу проверить по массиву [1], если содержимое массива [1] выше, я хочу, чтобы ячейка o была зеленой, в противном случае - красной.

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

Ответы [ 2 ]

5 голосов
/ 11 марта 2012

Убедитесь, что ваш рендерер расширяет DefaultTableCellRenderer:

CellRenderer extends DefaultTableCellRenderer {
   ...  

Тогда getTableCellRendererComponent() может выглядеть так (этот метод вызывается каждый раз при визуализации ячейки):

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

    Component cellComponent = super.getTableCellRendererComponent(
          table, value, isSelected, hasFocus, row, column);
     cellComponent.setForeground(isMyConditionFullfilled(value) ? Color.GREEN : Color.RED);
     return cellComponent;    
}
1 голос
/ 11 марта 2012

Ваш класс визуализации должен реализовывать TableCellRender Попробуйте это в вашем классе рендеринга:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JLabel label = new JLabel();
        label.setOpaque(true);
        if (value != null && value.equals("text")) { //Checking if  cell´s values isnt null and the condition is true
            label.setBackground(Color.GREEN);
        }else{
            label.setBackground(Color.RED);
        }
        return label;
    }

Визуализатор проверит каждую ячейку самостоятельно, просто скажите ей, как визуализировать каждую ячейку. Переменная «значение» содержит значение для каждой строки, поэтому вы можете использовать его для проверки условия. Если для вашего столбца определен тип, приведите переменную «значение». Например, если в вашей ячейке определен тип Double:

double valDouble = (Double) value;
if (value != null && value == 5.00) { //Checking if  cell´s values isnt null and the condition is true
        label.setBackground(Color.GREEN);
 }else{
        label.setBackground(Color.RED);
  }
...