2010-06-22 2 views
1

저는이 초보자 커뮤니티에 가입 한 초보자입니다. 나는 이것이 프로그래밍 질문과 답변을위한 최고의 사이트라는 것을 인정해야합니다. 이제 요점을 알려 드리겠습니다 :JList 각 줄마다 다른 글꼴 색이 있어야 할 수도 있습니다.

ColorChooser에서 가져온 다른 글꼴 색으로 줄을 입력 할 수있는 JList를 만들려고합니다. 이미 아래에 설명 된대로 시도했습니다.

미리 답변 해 주셔서 감사합니다.

CustomObject o = (CustomObject)value; 
+0

수 DUP : http://stackoverflow.com/questions/1076473/how-to-generate-a-jlist-with-alternating-colors – Xorty

+0

그 해결책을 확인했는데, 나는이 예제와 달리 각각의 경우에 실제로 사용하고 싶은 색상을 실제로 수동으로주는 방법을 모르겠습니다. – kxk

+0

SSCCE가 아닙니다. 어떻게 컴파일합니까? CustomObject를 빌드하고 모델에 추가하는 위치는 어디입니까? 아래 링크에서 SSCCE를 보지 못하셨습니까? 또한 getColor 메소드가 String을 반환하는 이유는 setForeground() 메소드가 Color 객체를 기대하기 때문입니다. Color 객체를 전달할 때 왜 String/Color로 앞뒤로 변환합니까? – camickr

답변

3
: 라인에

java.lang.ClassCastException: java.lang.String cannot be cast to app.CustomObject 

:

class CustomObject 
{ 
    String s; 
    Color color; 
    String scolor; 

    public CustomObject(Color color, String s) 
    { 
     this.s = s; 
     this.color = color; 
    } 

    public String getColor() 
    { 
     return scolor = Integer.toString(color.getRGB()); 
    } 

    public String getData() 
    { 
     return s; 
    } 

    @Override 
    public String toString() 
    { 
     return s + color.getRGB(); 
    } 

} 

class myListRenderer extends DefaultListCellRenderer 
{ 

Color color; 

@Override 
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
{ 
    super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 

    if (value != null) 
    { 
     CustomObject o = (CustomObject)value; 
     setText(o.getData()); 
     color = new Color(Integer.parseInt(o.getColor())); 
     setForeground(color); 
    } 
    return this; 
} 
} 

내 주요 문제는 내가 오류를 얻을 수 있습니다 : 안부, 여기

DWC 내 샘플 코드

각 줄의 배경색을 다르게하려면 th 모델의 정보. 따라서 단순히 모델에 문자열을 저장하는 대신 Color 및 Text의 두 가지 속성이 포함 된 사용자 정의 Object를 저장합니다. 그런 다음 사용자 정의 렌더러는 색상을 사용하여 선의 배경을 설정하고 텍스트를 사용하여 선의 값을 설정합니다.

posting은이 접근법을 사용한 예를 보여줍니다. 이 예제는 콤보 상자에 대한 개념이지만 개념은 동일합니다.

편집 :이 원래 예를했다 믿습니다

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.plaf.basic.*; 

public class ComboBoxColor extends JFrame 
{ 
    public ComboBoxColor() 
    { 
     Object[] items = { Color.red, Color.green, Color.blue }; 
     JComboBox comboBox = new JComboBox(items); 
     comboBox.setRenderer(new ColorRenderer(comboBox)); 
     getContentPane().add(comboBox, BorderLayout.NORTH); 
     add(new JTextField(), BorderLayout.SOUTH); 
    } 

    public static void main(String[] args) 
    { 
     ComboBoxColor frame = new ComboBoxColor(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    class ColorRenderer extends BasicComboBoxRenderer 
    { 
     JComboBox comboBox; 
     Border border; 


     public ColorRenderer(JComboBox comboBox) 
     { 
      this.comboBox = comboBox; 
      border = new LineBorder(Color.WHITE); 
     } 

     public Component getListCellRendererComponent(
      JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
     { 
      super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 

      setText(value.toString()); 

      if (!isSelected) 
       setBackground((Color)value); 

      return this; 
     } 
    } 
} 
+0

camickr 맞춤 렌더러가 어떻게 작동하는지 보여 주실 수 있습니까? 나는 내가 너무 많이 묻는 것을 알고있다. 그러나 내가 말했듯이 나는 커스텀 코드 작성에 익숙하지 않은 Java에 익숙하지 않다. – kxk

+0

라인의 색상을 번갈아 나타내는 예제 렌더러에 대한 링크가 제공됩니다. 그래서 코드가 그다지 다르지 않습니다. 값을 "사용자 정의 객체"로 캐스팅합니다. 그런 다음 Color of you 사용자 정의 객체를 사용하여 배경을 설정합니다. 그런 다음 사용자 정의 객체의 텍스트를 사용하여 레이블 텍스트를 설정합니다. 추가 도움이 필요하면 SSCCE (http://sscce.org)를 게시하십시오. 또한 JLabel이 아닌 기본 렌더러를 확장해야합니다. – camickr

+0

이 작업을 지금 당장 수행하려고하는데이 줄에 몇 가지 문제가 있습니다. CustomObject o = (CustomObject) value; 일부 희한 이유 나는 예외를 얻을 : java.lang.ClassCastException가 : java.lang.String의이 app.CustomObject – kxk

관련 문제