문제

이 작업을 수행하기 위해 사용자 정의 셀 렌더러 클래스를 만들었습니다.

public class MatchTableCellRenderer extends DefaultTableCellRenderer{


    public Component getTableCellRendererComponent (JTable table,
                                                    Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
        Component cell;
        cell = super.getTableCellRendererComponent(
                table, obj, isSelected, hasFocus, row, column);
        if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
            System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);

            cell.setForeground(Color.green);

        }
        return cell;
    }


}
.

와이 테이블의 열 에서이 렌더러를 사용하도록 설정했습니다.

    tempColumn = table.getColumnModel().getColumn(0);
    tempColumn.setCellEditor(new MacColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(1);
    tempColumn.setCellEditor(new IpColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(2);
    DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
    dfEditor.setClickCountToStart(2);
    tempColumn.setCellEditor(dfEditor);
    tempColumn.setCellRenderer(new MatchTableCellRenderer());
.

길이= 7 녹색의 문자열 []을 포함하는 행을 원하고 기본 색상으로 다른 색상이 필요합니다.그러나 모든 행이 녹색이되는 것은 흥미 롭습니다.나는 당신이 볼 수있는 인쇄 라인을 가지고 있습니다.그것은 4 번 인쇄됩니다 (내 테이블은 12 행이 있습니다). 그러나 모든 행은 4 대신 녹색으로 만들어집니다.

도움이 되었습니까?

해결책

이유는 DefaultTableCelleDitor의 악명 높은 컬러 메모리 (TM)입니다. 하나의 지점에서만 색상을 설정해야합니다.

if (myCondition) {
   setBackground(...) {
} else {
   setBackground(...) 
} 
.

정확한 세부 사항은 최근 스레드

다른 팁

XxxCellRenderer를 사용할 수 있지만 prepareRenderer() 를 사용하는 것이 좋습니다.

올바른 코드의 경우, if-else 내부를 무시하거나 테스트해야합니다

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