2011-10-12 2 views
1

내 응용 프로그램에서 .xml 파일을 읽고 JTable에 데이터를 쓰고 있습니다. 표의 데이터 외에도 .xml 파일에는 각 행의 배경색을 정의하는 속성이 있습니다. 셀 렌더링 방법은 다음과 같습니다.자바에서 캐스팅 오류

 

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
     boolean hasFocus, int row, int col) { 
    JComponent comp = new JLabel(); 

    if (null != value) { 
     //reading the data and writing it in the comp 
    } 

    GenericTableModel model = (GenericTableModel) table.getModel(); 
    GenericObject go = model.getRowObject(row); 

    Color test = new Color(255, 255, 255); 
    if (go.getValueByName("COLOR") == null){ 

    }else{ 
     test =(Color) go.getValueByName("COLOR"); 
    } 

    comp.setBackground(test); 

    return comp; 
} 

.xml 파일은 프로그램 내에서 초기화됩니다. 내 문제는 변수 테스트를 색으로 저장할 수 있도록 파일에서 색을 정의하는 방법을 모른다는 것입니다. "Color.white", "white"및 심지어 "255, 255, 255"로 쓰려고했지만 변수에 저장하려고하면 캐스팅 오류가 발생합니다.

파일의 색상을 어떻게 정의 할 수 있습니까?

+0

당신은 Color 객체에 Row 객체를 던지려고합니다. – Rob

+0

아니요 ... 올바른 객체를 추가하고 있습니다 ... 행을 가져 가고 색상 속성 만 가져 오는 중입니다 ... 그리고 나서 그것을 시도해보십시오. 어떤 시도가 작동하지 않습니다. – schmimona

+0

테스트가 문자열이고 test = go.getValueByName ("COLOR")라고 쓰면됩니다. toString(); 그것은 효과가 있었을 것입니다 ...하지만 그때 문자열에서 구성 요소의 배경을 설정할 수 없습니다, 내가? – schmimona

답변

1

GenericObject # getValueByName()은 문자열을 반환합니다. 맞습니까? 이 경우 문자열을 Color 인스턴스를 만드는 데 사용할 수있는 무언가로 변환해야합니다. 문자열이라고 가정 "R, G는 B가"그 쉼표에 문자열을 분할 정수로 각 성분을 변환하고, 컬러 생성 :

public static Color fromString(String rgb, Color deflt) { 
    String[] comp = rgb.split(","); 
    if (comp.length != 3) 
     return deflt; 
    int rc[] = new int[3]; 
    for (int i = 0; i < 3; ++i) { 
     rc[i] = Integer.parseInt(comp[i].trim()); 
     if (rc[i] < 0 || rc[i] > 255) 
      return deflt; 
    } 
    Color c = new Color(rc[0], rc[1], rc[2]); 
    return c; 
} 

다른 대안 색 컬러 필드를 정의하는 것이다 Color (Color.BLACK, Color.RED 등)의 미리 정의 된 정적 필드와 이름이 일치하고 올바른 필드를 가져 오기 위해 리플렉션을 사용하지만이를 연습장으로 남겨 둡니다.

0

42 개의 답변에 대한 후속 조치로서 실제로 색상이 XML에 저장되는 방식에 따라 달라집니다. 색상의 값을 색상의 십진수 또는 16 진수 값을 나타내는 단일 문자열 (쉼표 없음)로 저장할 수도 있습니다. 16 진수는 사람이 읽을 수있는 색상입니다 (예 : "16776960"대신 노란색의 경우 "FFFF00").

10 진수로 (그리고 오류 검사없이, 레코드의 경우, 나는 42와 같은 기본값을 사용함)

진수 나는 심지어 "#"앞에는 16 진수 값을 본 적이

public static Color readColor(String hexString) { 
    long avoidOverflows = Long.parseLong(hexString, 16); 
    return new Color((int)long); 
} 

public String writeColor(Color color) { 
    return Integer.toHexString(color.getRGB(), 16); 
} 

(당신이 F같은 알파 값과 색상을 처리 할 수 ​​avoidOverflows 필요) 그들이 더 HTML과 같은 확인합니다. 따라서 XML에 대한 사양에 따라 달라집니다.