2010-07-23 4 views
11

JTable에 여러 열 머리글을 만들 수있는 방법이 있습니까? 내 말은 일반적으로 단 하나의 행이 있지만 동일한 형식 (머리글)이있는 두 개가 필요하며 그 중 하나의 셀 중 일부를 결합하는 것입니다.자바 스윙 - JTable의 여러 열 헤더?

 
Header0 |   Header123   | Header4 
Header0 | Header1 | Header2 | Header3 | Header4 

어떤 방법이 있나요 :

는이 같은 뭔가가 필요?

답변

1

당신은 BasicTableHeaderUI을 확장 할 수 있으며 모든 유형의 헤더를 그릴 수있는 페인트 방법의 구현을 직접 작성할 수 있습니다. 다음 변경 후 기본 헤더 UI 다음 명령어가 포함 된 table.getTableHeader().setUI(MyTableHeaderUI)

5

Groupable Header 예는 도움이 될 수있는 몇 가지 오래된 코드입니다.

+0

저는 이것을 전에 사용했고 정말 좋아했습니다. 매력처럼 일했다. –

6

닉 메이어 (Nick Meyer)는 친절하게 답변 해 주셔서 감사합니다. 귀하의 주소에있는 콘텐츠는 약간 오래된 것입니다. 나는 1.7과 그것을 실행하고 예상대로 작동하지 않았지만 올바른 작동하도록 변경할 수 있습니다. 내가 만든 변경 사항은 다음과 같습니다.

/* 
* add these code in GroupableTableHeader 
*/ 

    public void updateUI(){ 
//  setUI(this.getUI()); 

     TableCellRenderer renderer = getDefaultRenderer(); 
     if (renderer instanceof Component) { 
      SwingUtilities.updateComponentTreeUI((Component)renderer); 
     } 
    } 

/* 
* add these code in GroupableTableHeaderUI in 2 places, you must know where 
*/ 
     if (renderer == null) { 
      renderer = header.getDefaultRenderer(); 
     } 

/* 
* change the getSize method in ColumnGroup 
*/ 

    public Dimension getSize(JTable table) { 
    Component comp = renderer.getTableCellRendererComponent(
     table, getHeaderValue(), false, false,-1, -1); 
    int height = comp.getPreferredSize().height; 
    int width = 0; 
    Enumeration en = v.elements(); 
    while (en.hasMoreElements()) { 
     Object obj = en.nextElement(); 
     if (obj instanceof TableColumn) { 
     TableColumn aColumn = (TableColumn)obj; 
     width += aColumn.getWidth(); 
//  width += margin; 
     } else { 
     width += ((ColumnGroup)obj).getSize(table).width; 
     } 
    } 
    return new Dimension(width, height); 
    } 

최종 결과입니다. enter image description here