2011-07-04 7 views
3

NimbusLookAndFeel을 사용하고 있습니다. 이 Look & Feel에서는 JTable의 셀 배경이 흰색과 연회색 (행 번호에 따라 다름)으로 표시됩니다. 이제 TableCellRenderer를 구현하는 사용자 정의 셀 렌더러를 작성합니다. JTable에있는 셀의 위치에 따라 이러한 렌더러의 배경을 설정해야합니다.NimbusLookAndFeel 색상 문제가있는 JTable TableCellRenderer 배경

public class MyCellRenderer extends JLabel implements TableCellRenderer{ 


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

       Color bgColor = //need to retrieve the right cell background color 
       setBackground(bgColor); 
     return this; 
    } 

} 

어떻게 이러한 색상 값을 얻을 수 있습니까?

+0

다시 읽기, 내가 Nimbus는 기본적으로 열이 아닌 _rows_의 배경을 줄무늬로 표시합니다. 겪고있는 문제가 정확히 무엇입니까? 당신의 발췌 문장에서 TableCellRenderer를 확장하지 않으면 BTW (nitpicking ...)가 구현됩니다. – kleopatra

답변

7

기술적으로, 당신은

Color alternate = UIManager.getColor("Table.alternateRowColor"); 

실질적 UIManager를 통해 색상을 액세스 할 수 있습니다, 나는 처음부터 렌더러를 작성 권하고 싶지 않다 - 바로 그것을 얻기 위해 고려해야 할 여러 사항이 있습니다. 이러한 세부 사항은 f.i. SwingX (편견 :-)

논리를 직접 수행 할 것으로 예상됩니다 ;-). 다음 작업 조각은 (당신이하지 열을 기준으로 행에 의해 색상으로 원하는 가정,하지만 그 것이다 변경 ... 사소한)입니다 :

TableCellRenderer renderer = new TableCellRenderer() { 

     JLabel label = new JLabel(); 

     @Override 
     public Component getTableCellRendererComponent(JTable table, 
       Object value, boolean isSelected, boolean hasFocus, 
       int row, int column) { 
      label.setOpaque(true); 
      label.setText("" + value); 
      Color alternate = UIManager.getColor("Table.alternateRowColor"); 
      if (row % 2 == 1) { 
       label.setBackground(alternate); 
      } else { 
       label.setBackground(Color.WHITE); 
      } 
      return label; 
     } 

    }; 
    table.setDefaultRenderer(Object.class, renderer); 
+0

나는 대안이 없다. 나는 커스텀 셀 렌더러를 작성해야만한다. 나는 당신의 해결책을 시도 할 것이다, 고마워. 그러나 이러한 호출이 열 번호를 기반으로 색상을 구별 할 수있는 방법을 이해하지 못합니다. – Heisenbug

+0

작동하지 않습니다. 세포는 여전히 모든 공백입니다. – Heisenbug

+0

@Overbose - 어떤 셀에 적용 할 색을 결정하는 논리)주의 : 선택, 집중, 편집, 끌기 및 모든 조합을 고려해야합니다. "공백"이란 무엇을 의미합니까? – kleopatra

-1

이 완벽하게 작동합니다 :

public class MyRenderer extends DefaultTableCellRenderer { ... }