2013-08-15 36 views
5

Tôi đã thực hiện lớp này CustomCellRenderer có ý định sử dụng trong các đối tượng JXTreeTableJXTable vì tôi có nhiều trong số này trong dự án của mình. Vì vậy, lớp này thực hiện TreeCellRendererTableCellRenderer giao diện:Custom TableCellRenderer/TreeTableCellRenderer không hiển thị các ô trong Bảng

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

Và đây là mã nơi tôi đặt renderer:

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

tôi hy vọng nền và foreground trở thành màu xanh và trắng tương ứng khi liên tiếp là đã chọn. Tuy nhiên nó chỉ xảy ra ở ô trong bảng Tree (cột đầu tiên) trong khi chỉ thay đổi foreground và background tĩnh trắng trong các tế bào khác trong rất giống hàng đã chọn:

enter image description here

thể ai xin vui lòng cho tôi biết lý do tại sao các tế bào (tức là không phải là tế bào cây) không thay đổi màu nền của chúng?

+0

không entendi la pregunta – nachokk

+1

tôi don 't hiểu, một trong hai; tại sao 'Object.class'? _what_ không đổi thành màu xanh? Vui lòng chỉnh sửa câu hỏi của bạn để bao gồm một [sscce] (http://sscce.org/) thể hiện vấn đề bạn mô tả. – trashgod

Trả lời

7

Cảm ơn mọi người vì nhận xét và đề xuất của bạn. Tôi tìm thấy giải pháp trong tài liệu JComponent#setBackground(Color bg):

Đặt màu nền của thành phần này. Màu nền là chỉ sử dụng chỉ khi thành phần mờ đục và chỉ bởi các lớp con của Việc triển khai JComponent hoặc ComponentUI. Các lớp con trực tiếp của Thành phần JComponent phải ghi đè lên paintComponent để tôn vinh thuộc tính này.

Kể từ CustomCellRenderer của tôi kéo dài từ JLabel điều duy nhất tôi phải làm là đảm bảo nó đục và màu nền của nó sẽ được sơn:

@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

Ah, 'DefaultTableCellRenderer' bị mờ theo mặc định; nó có thể được sử dụng trong ngữ cảnh này không? – trashgod

+1

@trashgod cảm ơn lời khuyên. Nó hoạt động quá! – dic19

Các vấn đề liên quan