2009-08-24 6 views
4

JLabel (렌더러 자체는 JPanel까지 확장 됨)으로 구성된 simple-ish 셀 렌더러가 있는데, 이것을 Nimbus 모양에서 현저하게 렌더링하려고합니다. 느낌. 기본적으로 어떤 일이 것은 (후광이 색칠 다른 행이 같은) 가벼운 행에, 내 특정 셀 렌더러 (모두 가벼운보다 훨씬 어두운하고 어두운 색) 테이블 배경 색상을 사용하고 있다는 점이다. 내 렌더러에서 나는 할 : 나는 코드의 전체 블록을 언급하는 경우Nimbus의 룩앤필을위한 간단한 셀 렌더러 설계하기

if (isSelected) { 
    setBackground(table.getSelectionBackground); 
} 
else { 
    setBackground(table.getBackground); 
} 

아웃 후 모든 내 행 (하나가 아닌 테이블 배경,하지만 다른 색상) 어두운 색상에 있습니다. 나는 심지어 무엇이 계속 될 수 있는지를 잘 모른다! 위의 코드 스 니펫은 배경색이 다른 셀을 어떻게 생성합니까? 내 방법 호출간에 table.getBackground 색깔이 바뀌나요? 나는이 코드 조각을 사용하여 시도했다

:

DefaultTableCellRenderer 클래스에
Color alternateColor = sun.swing.DefaultLookup.getColor(
         peer, 
         peer.getUI, 
         "Table.alternateRowColor"); 
if (alternateColor != null && row % 2 == 0) 
    setBackground(alternateColor); 

. 그리고 전혀 영향을 미치지 않는 것 같습니다. 누구든지 Nimbus와 협력하는 맞춤형 셀 렌더러를 가지고 있습니까?

편집는 : 사람이 관심이 있다면 내가 실제로 자바 스칼라을하지 사용했는데,이는 스칼라 테이블 셀 렌더링에 문제가 밝혀졌다. Java 프로그램에서 허용되는 대답은 정상적으로 작동합니다. 별개의 질문 here.

답변

4

첫 번째 코드는 괜찮습니다. 대체 행의 경우 UIManager.getColor("Table.alternateRowColor")을 사용해야하고 그렇지 않으면 table.getBackground()를 사용해야한다고 생각합니다. 선택된 행에 대해 table.getSelectionBackground()를 사용하십시오. 따라서 코드는 다음과 같을 수 있습니다

if (isSelected) { 
    setBackground(table.getSelectionBackground()); 
} 
else { 
    if (row % 2 == 0) { 
     setBackground(UIManager.getColor("Table.alternateRowColor")); 
    } else { 
     setBackground(table.getBackground()); 
    } 
} 

패널이 불투명하고 라벨이 투명해야합니다. 이것이 * 정확히 * 내가 시도하고 작동하지 않았다 무엇을 - http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

+0

예 :

여기 후광 UI 기본값으로 좋은 링크입니다. 그러나 실제로 Java가 아닌 Scala를 사용하고 있으므로 Java로 빠른 테스트 케이스를 작성하기로 결정했습니다. 감사합니다. 불행히도 나는 스칼라에서 왜 작동하지 않는지 전혀 모른다. –

+0

스칼라에 대해 많이 알지 못하더라도 왜 작동하지 않아야하는지 알지 못합니다. 스윙은 스칼라에서도 스윙입니다. –

+0

사실 (행 % 2 == 1) {'if '입니다. – cimnine