2015-03-25 5 views
0

У меня есть Jtable с некоторыми значениями [все это строки]. Некоторые значения имеют перед ними «*», которые мне нужно окрашивать. Я могу покрасить те ячейки, у которых есть «*», используя Cell Renderer. Но после того, как я покрасил ячейку, мне нужно удалить «*», не меняя цвет ячейки. Когда я пытаюсь изменить значение ячейки, цвет меняется на WHITE. Что мне здесь не хватает. Вот кодКак визуализировать цвет ячейки после изменения значения ячейки Jtable

public SimpleTable() 
{ 
    JPanel panel = new JPanel(); 

    setTitle("Colored JTable"); 
    setBounds(400, 400, 400, 250); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); 

    JTable table = new JTable(this.getRows(), this.getHeaders()); 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);   
    table.setDefaultRenderer(Object.class, new MyTableRenderer());  

    this.scrollPane = new JScrollPane(table); 
    panel.add(scrollPane); 
    getContentPane().add(panel); 
} 

Это мой мобильного визуализатор

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); 

      if(table.getValueAt(row, column).toString().contains("*")) 
      {    
       String v = table.getValueAt(row, column).toString().replace("*", "");    
       table.setValueAt(v, row, column); 
       cellComponent.setBackground(Color.YELLOW);    
      } 
      else 
      { 
       cellComponent.setBackground(Color.WHITE);     
      } 
     return cellComponent; 

ответ

3

Варианта:

  1. Оставьте * на месте в данной ячейке, использовать его в качестве маркеров для живописи, но просто не отрисуйте его в своем рендерере.
  2. Используйте отдельное не визуализированное поле строки, например булево, чтобы определить, должна ли ячейка быть окрашена в красный цвет или нет.

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

В качестве примера первого:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    if(value != null && value.toString().contains("*")) {    
     value = value.toString().replace("*", "");    
     setBackground(Color.YELLOW);    
    } else { 
     setBackground(Color.WHITE);     
    } 
    return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
+0

значение Ячейка должна быть изменена с цветом на месте. Можете ли вы показать пример того, как реализовать последнее решение? – SilentCoder

+0

@SilentCoder: нет значения не нужно менять. ** ** значение ** необходимо изменить - большая разница. Для второго ответа это будет означать изменение класса, который составляет * строку * для данных таблицы таблицы, чтобы включить логическое поле. –

+0

Вышеупомянутое решение не заменяет знак *. – SilentCoder

Смежные вопросы