문제

나는 몇 가지로 구성된 단순한 셀 렌더러를 가지고 있습니다. JLabels(렌더러 자체가 확장됨 JPanel) 그리고 Nimbus 모양과 느낌에서 현명하게 렌더링되도록 노력하고 있습니다.기본적으로 무슨 일이 일어나고 있는지는 거룻배 행(Nimbus가 대체 행 색상 지정), 내 특정 셀 렌더러가 테이블 배경색을 사용하고 있습니다(밝은 색과 어두운 색보다 훨씬 더 어둡습니다). 그림 물감).내 렌더러에서는 다음을 수행합니다.

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

이 전체 코드 블록을 주석으로 처리하면 모든 행이 더 어두워집니다. 색상(테이블 배경은 아니지만 대체 색상도 아님)나는 무슨 일이 일어나고 있는지조차 이해하지 못합니다!위의 코드 조각은 배경색이 다른 셀을 어떻게 생성합니까?는 table.getBackground 내 메소드 호출 사이에 색상이 변경됩니까?

다음 코드 조각을 사용해 보았습니다.

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

어느 것이 DefaultTableCellRenderer 수업.그리고 전혀 영향을 미치지 않는 것 같습니다.Nimbus와 함께 작동하는 맞춤형 셀 렌더러를 갖고 있는 사람이 있나요?

편집하다:누구든지 관심이 있다면 이것은 문제로 판명되었습니다. 스칼라 저는 실제로 Java가 아닌 Scala를 사용하고 있었기 때문에 테이블 셀 렌더러를 사용했습니다.아래 허용되는 답변은 Java 프로그램에서 잘 작동합니다.별도의 질문이 접수되었습니다. 여기.

도움이 되었습니까?

해결책

괜찮다면 첫 번째 코드 조각을 사용해야 할 것 같습니다. 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());
    }
}

패널이 불투명하고 라벨이 투명한지 확인하는 것을 잊지 마세요.

Nimbus UI 기본값에 대한 좋은 링크는 다음과 같습니다.http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top