2012-05-09 4 views
0

안녕하세요 :) Java 6을 사용하고 있습니다.JComboBox : HTML 항목과 함께 작동하는 키 선택을 얻는 방법?

당신이 JComboBox을 사용하는 기능

, 당신은 일반적으로 문자를 입력하여 항목을 선택할 수 있습니다. 어느 쪽이 좋다.

문제가

불행하게도,이 작동하지 않습니다, 당신의 항목이 HTML 문자열 인 경우, 예를 들어, "<html><b>foo</b> <i>bar</i></html>". 나는 주로 HTML을 사용하여 다른 색상으로 항목을 표시하고 있습니다. 이 문제를 해결하기 위해 그래서

나쁜

솔루션, 나는 항목이 "<html>"로 시작하면 기본적으로 모든 태그를 무시 JComboBox$DefaultKeySelectionManager을 변경하여 내 자신의 KeySelectionListener을 구현했습니다.

그건 그렇습니다. 하지만 : 기본적으로 사용되는 것이 JComboBox$DefaultKeySelectionManager이라는 잘못된 생각이 들었습니다. 왜? 첫 번째 문자 만 처리하기 때문에 문자가 입력됩니다. 같은 문자로 시작하는 항목이 많은 긴 목록의 경우 이는 전혀 편리하지 않습니다.

상자에 입력 한 모든 문자를 처리하는 것이 좋으며, 기본값은 BasicComboBoxUI$DefaultKeySelectionManager입니다 (기본값). 문제는 이것이 중첩 ComboBoxUI와 상호 작용한다는 것입니다. 그것의 JList 걸리고 getNextMatch(prefix, …)을 호출합니다. 슬프게도 JList.getNextMatch()은 HTML 항목에 신경 쓰지 않습니다.

주어진 LAF가 사용되는 UI를 결정하기 때문에 BasicComboBoxUI를 다른 JList 구현으로 확장 할 수 없습니다.

아이디어가 있으십니까? Java 7에서이 문제를 해결하지 못했을 것입니다.

+0

을 수행하는 콤보 상자에 렌더러를 설정 a [SSCCE] (http://sscce.org/) – mKorbel

답변

2

이것은 실제로 피타 (pita)이며 동일한 문제에 직면했습니다. 마지막으로, 콤보 박스는 키 선택을 위해 모델에 포함 된 객체의 toString() 메소드를 사용합니다. 가장 쉬운 방법은 선택에 사용 된 텍스트를 반환하는 toString() 메서드가있는 객체에 모든 HTML 문자열을 래핑하고 셀 렌더러를 사용하여 HTML을 렌더링하는 것입니다. 예를 들어 다음

public class HtmlOption { 
    private final String rawText; 
    private final String htmlText; 

    private HtmlOption(String rawText, String htmlText) { 
     this.rawText = rawText; 
     this.htmlText = htmlText; 
    } 

    public String toString() { 
     return this.rawText; 
    } 

    // getters, equals and hashCode omitted 
} 

그리고 이러한 개체를 사용하여 콤보 입력 :

model.addElement(new HtmlOption("foo bar", "<html><b>foo</b> <i>bar</i></html>")); 

을 그리고 당신의 질문을 수정 빨리 더 나은 도움을

setText(((HtmlOption) value).getHtmlText()); 
+0

대단히 고마워요,이 작품! 렌더러를 건드리지 않고,'HtmlOption.toString()'에서 스택 트레이스를 검사 할 수 있습니다.하지만 너무 비싸다고 생각합니다. –

관련 문제