문제

이것은 나를 절대적으로 미쳤다.

JTABLE으로 테이블 셀의 형식을 변경하려면 자체 렌더러를 사용해야합니다. 그러나 나는 이것을 제대로 구현할 수없는 것 같습니다.

이것은 내 현재 설정입니다.

public class MyClass
{
    public static void main(String args[])
    {
        JTable myTable = new JTable(10, 10);
        myTable.setDefaultRenderer ([I dont know what to put here], new CustomRenderer());
    }
}

class CustomRenderer extends DefaultTableCellRenderer 
{
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        // Formatting
        return c;
    }
}

첫 번째 매개 변수에 무엇을 사용해야합니까? setDefaultRenderer? API는 방금 '클래스'라고 말합니다. 나는 거기에 무엇을 넣어야하는지 전혀 모른다.

누군가가 가장 간단한 용어로 내가 이것을 어떻게 구현하는지 설명 할 수 있습니까? 내에서 서식을 변경할 수있는 방법의 예를 제공하십시오. main() 방법도.

도움이 되었습니까?

해결책

첫 번째 매개 변수에서 setDefaultRenderer, 클래스 리터럴 렌더링을 무시하고자하는 클래스의 경우. 즉, 데이터가 모든 문자열로 구성되면

myTable.setDefaultRenderer(String.class, new CustomRenderer());

데이터가 값으로 구성된 경우 BigDecimal 또는 Integer 클래스로서 각 클래스 유형에 대해 해당 메소드를 여러 번 호출해야합니다 (BigDecimal.class 또는 Integer.class 각각의 경우).

마지막으로 배경색을 변경하려면 렌더러에서 다음을 수행합니다.

class CustomRenderer extends DefaultTableCellRenderer 
{
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        c.setBackground(new java.awt.Color(255, 72, 72));
        return c;
    }
}

작동 해야하는 렌더러를 작성하는 경우 인터페이스의 모든 클래스, 당신은 또한 수정해야합니다 getColumnClass 당신의 기능 테이블 모델 이 인터페이스를 구현하는 모든 객체의 인터페이스 클래스를 반환하십시오.

public Class<? extends Object> getColumnClass(int c) {
    Object object = getValueAt(0, c);
    if(object == null) {
        return Object.class;
    if(getValueAt(0, c) instanceof IColorable) {
        return ICarPart.class;
    } else {
        return getValueAt(0, c).getClass();
    }
}

이를 사용하면 icolorable.class 용 렌더러를 등록 할 수 있으며 각 구현에 대해 별도의 렌더러를 등록 할 필요가 없습니다.

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