2013-07-24 2 views
1

JTable에 부울 열이 있으므로 각 셀에 확인란이 있습니다. 배경색을 변경하기 위해 셀 렌더러를 설정하려고 할 때 셀의 체크 상자가 값 (true, false)으로 대체되었습니다. 무엇이 잘못 되었나요? 셀의 Jtable setDefaultRenderer 체크 박스가 사라짐

내 셀 렌더링 :

  • 또는 (Xxx)TableCellRenderer 당신은 함께 노력하기 위해 할 수있는 장식 라인

    data_table.setDefaultRenderer(Boolean.class, new BackgroundTableCellRenderer()); 
    
  • +1

    DefaultTableCellRenderer는 JLabel입니다. 렌더러를 수행하기 위해 Object의 toString() 값을 사용합니다. – camickr

    답변

    4
    • 사용 prepareRenderer : 나는 그런 렌더러를 설정

      class BackgroundTableCellRenderer extends DefaultTableCellRenderer { 
      
          public Component getTableCellRendererComponent(JTable table, Object value, 
            boolean isSelected, boolean hasFocus, int row, int col) { 
      
           Component c = super.getTableCellRendererComponent(table, value, 
             isSelected, hasFocus, row, col); 
           if(row%2 == 0) 
           { 
            Color bColor = Color.decode("#EFF2ED"); 
            c.setBackground(bColor); 
           } 
           else 
            c.setBackground(Color.white); 
      
           return c; 
          } 
      } 
      

    .

    class BooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource { 
    
         private static final long serialVersionUID = 1L; 
         private final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); 
    
         BooleanRenderer() { 
          super(); 
          setHorizontalAlignment(JLabel.CENTER); 
          setBorderPainted(true); 
         } 
    
         @Override 
         public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
          if (isSelected) { 
           setForeground(table.getSelectionForeground()); 
           super.setBackground(table.getSelectionBackground()); 
          } else { 
           setForeground(table.getForeground()); 
           setBackground(table.getBackground()); 
          } 
          setSelected(value != null && ((Boolean) value).booleanValue()); 
          if (hasFocus) { 
           setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); 
          } else { 
           setBorder(noFocusBorder); 
          } 
          return this; 
         } 
        } 
    
    +0

    좋아요, 저에게는 효과가 있습니다 ... – user1005633