2011-08-16 6 views
4

저는 Swing을 처음 접했고 JTable 구성 요소로 어려움을 겪었습니다. 나는 다소 멋진 테이블을 만들기 위해 노력하고 있기 때문에 어느 곳에서나 찾고있는 특정 답변을 찾을 수 없었습니다.JTable 헤더 및 스페이서 행

나는 테이블의 맨 위에 "그룹"의 헤더를 갖고 싶습니다. 이것은 전체 테이블에 걸쳐있는 3 또는 4 개의 행을 의미하며 여러 열을 본질적으로 분할하여 "그룹화"합니다.

예 (눈의 피로를 사면)

////////////////////////////////ANIMALS////////////////////////// 
/////////Mammals///////////////////////Rodents/////////////////// 
////People/////Dogs//////////Rats/////Rodents of Unusual Size//// 

슬래시 ("/") 공백을 나타내는 곳. 첫 번째 헤더 인 "ANIMALS"은 표의 모든 열을 나타냅니다. 두 번째 헤더는 ANIMALS 등의 파티션을 내린다. 마지막 세 번째 헤더 다음에는 실제 테이블에 도착합니다. 각 테이블에는 각 유형의 Animal에 대해 하나씩 4 개의 열이 있습니다.

분명히 이것은 예이며 아마도 나쁜 것일 수도 있지만, 이것은 "헤더 분할"을 의미합니다.

내 질문 : 내가있는 JTableHeader과의 TableColumnModel가이 기능을 지원하는 방법을 볼 수 없습니다. 그럴 경우 누군가가 올바른 방향으로 나를 밀어 붙일 수 있습니까? 그렇지 않다면, 스윙 앱이 이와 같은 것을 필요로하는 것은 이번이 처음 일 수는 없습니다. 누구든지 알고있는 타사 구성 요소는 무엇입니까?

또한 "Spacer"또는 스패닝 행을 내 테이블 전체에 뿌려서 행 그룹을 나타낼 수 있기를 바랍니다. 이러한 스페이서는 테이블 내부에 존재하지만 머리글처럼 위에 있지는 않지만 모든 열에 걸쳐 있고 후속 행에 의해 표현 된 그룹의 이름을 나타내는 단일 레이블을 갖습니다. 다시 말하지만,이 아이디어를지지하는 스윙을 보지 못합니까?

감사합니다. 정말 끔찍한 예제/그림을 사과드립니다.

답변

1

기본적으로 JTable에는 헤더 행이 하나만 있습니다 (JTableHeader라는 JTable의 행이 올바르지 않습니다). 어쨌든 TableCellRenderer을 구현하면 머리글처럼 보이는 것처럼 첫 번째 n 개의 비 - 헤더 행을 표시 할 수 있습니다.

  1. 헤더의 셀

등처럼 원하는 행의 JTable의 셀 ordinar 표시하도록하는 TableCellRenderer 구현 :

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

    this.setOpaque(true); 
    TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer(); 
    return renderer.getTableCellRendererComponent(table, value, isSelected, 
      hasFocus, row, column); 
} 
  1. 단계는 다음 더 광석 작은 돌려주는 JTable를 확장 해, 다음의 메소드를 구현합니다. desidered 셀 렌더링 : 귀하의 요구 사항에 어쨌든

    public TableCellRenderer getCellRenderer(int row, int column){} 
    

를 해결하는 또 다른 문제가있다 : 당신이 그 결과를 실현하려 해결 방법을 찾아야 있도록 JTable는, 열 고정 된 수 있습니다.

+0

(가) 헤더에 영향을 미치는 렌더러, 당신은'table.getTableHeader()를 사용하지 않을 것입니다. setDefaultRenderer()'? – trashgod

+0

는 나에게 야생의 추측처럼 보입니다 - 또는 정말로 시도해 봤나 ;-) – kleopatra

+0

@kleopatra : 나는 정말 비슷한 것을 시도했습니다. – Heisenbug

1

셀 (행/열 모두) 그룹화 또는 분할은 코어 스윙에서는 지원되지 않으며 헤더 또는 테이블 자체에서는 지원되지 않습니다. JTable은 이 아니고 범용 그리드입니다. 격자 모양의 동작과 비주얼을 조정하려고하면 디자인과 싸울 것입니다. 할 수는 있지만 달성하기 란 쉽지 않습니다. @ Trashgod는 그 싸움 중 일부를 지적했다. (여전히 작동 하는가? 그들은 오래된 1 세대 Tame 예제처럼 보인다.) A JIDE은 그것을 지원하는 상용 제품입니다 (면책 조항 : 프로덕션 환경에서는 사용하지 마십시오 :

+0

유별난 다운 유권자, 당신의 이유는 무엇입니까? – kleopatra