2013-08-15 1 views
5

Я сделал этот класс CustomCellRenderer, предназначенный для использования в JXTreeTable и JXTable объектах, так как у меня их много в моем проекте. Так что этот класс реализует TreeCellRenderer и TableCellRenderer интерфейсов:Пользовательский TableCellRenderer/TreeTableCellRenderer не отображает ячейки таблицы

public class CustomCellRenderer extends JLabel 
           implements TreeCellRenderer, TableCellRenderer { 

    @Override 
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { 
     setBackground(selected ? new Color(83,142,213) : Color.white); 
     setForeground(selected ? Color.white : Color.black); 
     //here is the icon setting code but it's irrelevant to my problem 
     setText(value != null ? value.toString() : "<null>"); 
     return this; 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     setBackground(isSelected ? new Color(83,142,213) : Color.white); 
     setForeground(isSelected ? Color.white : Color.black); 
     setText(value != null ? value.toString() : "<null>"); 
     return this; 
    } 
} 

И вот код, где я поставил рендерер:

jXTreeTableConsumos.setDefaultRenderer(Object.class, new CustomCellRenderer()); 
jXTreeTableConsumos.setTreeCellRenderer(new CustomCellRenderer()); 

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

enter image description here

Может кто-нибудь пожалуйста, скажите мне, почему клетки (то есть а не древовидные клетки) не меняют цвет фона?

+0

нет entendi ла Pregunta – nachokk

+1

Я надеваю Не поймите; почему «Object.class»? _what_ не меняется на синий? Пожалуйста, отредактируйте свой вопрос, чтобы включить [sscce] (http://sscce.org/), который показывает проблему, которую вы описываете. – trashgod

ответ

7

Спасибо всем за ваши комментарии и предложения. Я нашел решение в документации JComponent#setBackground(Color bg):

Устанавливает цвет фона этого компонента. Цвет фона используется только в том случае, если компонент непрозрачен и только подклассами . Реализации JComponent или ComponentUI. Прямые подклассы JComponent должен переопределить paintComponent для соблюдения этого свойства.

Поскольку мой CustomCellRenderer простирается от JLabel единственное, что я должен сделать, это убедиться, что она непрозрачна и его цвет фона будет окрашена:

@Override 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    setOpaque(true);//adding this line I solved my problem 
    setBackground(isSelected ? new Color(83,142,213) : Color.white); 
    setForeground(isSelected ? Color.white : Color.black); 
    setText(value != null ? value.toString() : "<null>"); 
    return this; 
} 

enter image description here

+1

Ах, 'DefaultTableCellRenderer' по умолчанию непрозрачен; может ли он использоваться в этом контексте? – trashgod

+1

@trashgod спасибо за совет. Он тоже работает! – dic19

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