2013-07-18 2 views
2

특정 셀에 색을 넣으려고했는데 중복 된 질문 일 수 있습니다. 그러나 이미 여기에있는 것들 중 많은 것들을 살펴 봤는데 그 중 아무 것도 나를 위해 작동하지 않는 것 같습니다. 나는 내 자신을 게시 할 것이고 희망적으로 이것에 문제가있는 다른 사람들도 도움이 될 것이라고 생각했다.JTable ... getTableCellRendererComponent Override

여기 여기 JFrame의에 표시되는 내 코드

table.getColumn("Name").setCellRenderer(
       new DefaultTableCellRenderer() { 
        @Override 
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
         setText(value.toString()); 

         if (row==3) 
         { 
          setForeground(Color.RED); 
         } 
         return this; 
        } 
       } 
      ); 

입니다. 당신이 볼 수 있듯이 나는 "Name"열의 세 번째 행에있는 텍스트에만 색을 칠하려하지만 전체 행의 색을 지정합니다. enter image description here

의견이 있으십니까? 감사합니다. 가나안

답변

4

렌더링은 "이름"열에 대해 고유합니다. 행이 3 일 때 빨간색을 전경색으로 설정하지만 다른 행에 대해서는 재설정하지 않으므로 화가가 호출 될 때 항상 빨간색으로 표시됩니다. 행이 3 일 때 빨간색으로 설정해야하지만 다른 경우에는 원래 색을 다시 설정해야합니다.

EDITED : 수행 된 버전. 이제 원래의 전경색이 백업되고 super는 다른 열과 마찬가지로 렌더링됩니다.

  table.getColumn("Name").setCellRenderer(
      new DefaultTableCellRenderer() { 

     Color originalColor = null; 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
      DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
      if (originalColor == null) { 
       originalColor = getForeground(); 
      } 
      if (value == null) { 
       renderer.setText(""); 
      } else { 
       renderer.setText(value.toString()); 
      } 

      if (row == 3) { 
       renderer.setForeground(Color.RED); 
      } else { 
       renderer.setForeground(originalColor); // Retore original color 
      } 
      return renderer; 
     } 
    }); 
+0

감사합니다. 잘됐다! – k9b

+0

질문이 하나 더 있는데 setForeground (null)이 있습니까? row == 3을 red로 설정하고 else {bracket}에서 아무 것도하지 않겠습니다. 나는 기본적으로 아무 것도하지 않기를 원하지만 전경 검은 색이 과감하다. 고마워! 기본적으로 Color.BLACK은 원래 색상이 아닙니다. – k9b

+0

해결책을 편집했습니다. 확인하십시오. – Ezequiel