2015-08-06 7 views
1

У меня есть JXTreeTable, и у меня есть пользовательский рендеринг.Как установить цвет фона первого столбца JXTreeTable

Так что у меня этот код:

public class CustomTreeTableSpeseXCategoriaSpese extends JLabel implements TreeCellRenderer, TableCellRenderer { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 4842418316518803090L; 
    private Font fontTotale = new Font("Verdana", Font.BOLD, 12); 
    private Font fontNegativo = new Font("Verdana", Font.BOLD, 12); 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     setOpaque(true); 
     setHorizontalAlignment(SwingConstants.RIGHT); 
     if (row== table.getRowCount()-1) { 
      setForeground(Color.BLACK); 
      setBackground(Color.RED); 
      setFont(fontTotale); 
     }else if(row != table.getRowCount() && column !=3){ 
      setForeground(Color.BLACK); 
      setBackground(new Color(200, 200, 200)); 
      setFont(UtilitySwing.getTableFont()); 
     }else if(row != table.getRowCount()-1 && column ==3){ 
      //verifico il valore se negativo rosso 
      //se positivo blu 
      String valore = value.toString(); 
      if(valore.startsWith("-")){ 
       setForeground(Color.red); 
       setFont(fontNegativo); 
      }else{ 
       setForeground(Color.blue); 
       setFont(fontNegativo); 
      } 
     } 
     setText(value != null ? value.toString() : "<null>"); 
     return this; 
    } 

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { 
     setOpaque(true); 
     if (row== tree.getRowCount()-1) { 
      setForeground(Color.BLACK); 
      setOpaque(true); 
      setBackground(Color.RED); 
      setFont(fontTotale); 
     }else if(row != tree.getRowCount()){ 
      setForeground(Color.BLACK); 
      setBackground(new Color(200, 200, 200)); 
      setOpaque(true); 
      setFont(UtilitySwing.getTableFont()); 
     } 
     setText(value != null ? value.toString() : "<null>"); 
     return this; 
    } 
} 

Это код, чтобы создать JXTreeTable:

public JTreeTable(){ 
JXTreeTable talbe = new JXTreeTable(); 
     talbe .setTreeTableModel(new RandomTextTreeTableModel(listaConti)); 
     talbe .setDefaultRenderer(Object.class, new CustomTreeTableSpeseXCategoriaSpese()); 
     talbe .setTreeCellRenderer(new CustomTreeTableSpeseXCategoriaSpese()); 
    } 

Если я пытаюсь запустить этот код я могу показать следующее: enter image description here

Если я попытаюсь открыть первый узел, я могу это увидеть: enter image description here

Я хочу: 1) Показать весь текст 2) Как вы можете видеть, из изображений, я хочу установить цвет фона серым во всех первых столбцах. Как я могу ее исправить?

EDIT

Сообщение не дублировать, потому что в segnalation пост есть JTree, но в моем посте, я JXTreeTable, он отличается

+0

Возможный дубликат [Цветная строка в J Дерево] (http://stackoverflow.com/questions/26724913/color-row-in-jtree) –

+1

В этом посте есть JTree, в моем посте есть JXTreeTable – bircastri

+0

Да, это правда, но это решение может также применимо или, по крайней мере, может указывать на вас в правильном направлении. –

ответ

0

Это может быть сделано с помощью org.jdesktop.swingx.decorator.HighlightPredicate s

HighlightPredicate hlPred = new HighlightPredicate() { 
    @Override 
    public boolean isHighlighted(Component renderer, 
      ComponentAdapter adapter) { 
     return someCondition ? true : false; 
    } 
}; 

ColorHighlighter hl = new ColorHighlighter(hlPred, hlBgColor, hlFColor); 
treeTable.addHighlighter(hl); 

this SO question

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