2012-11-20 2 views
1

javafx2 응용 프로그램에서 ComboBox는 항목 목록을 표시해야합니다 (예 : String).javafx-2 ComboBox 변환기 : null 값에 대해 toString (T 객체) 메서드가 호출되지 않습니다.

이 목록에는 사용자가 선택을 허용 할 수 있기를 원하기 때문에 null 항목이 포함되어 있습니다.

ComboBox의 변환기 속성을 사용하고 있었기 때문에 비어있는 경우 대신 "[none]"과 같이 멋진 표현을 제공 할 수 있는지 궁금했습니다.
그러나 toString (Object 객체)이 null 항목에 대해 호출되지 않는다는 것을 발견했습니다.

다음은이 사례를 재현 한 가장 짧은 코드입니다. 포함 된 버전 정보.

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.ComboBox; 
import javafx.stage.Stage; 
import javafx.util.StringConverter; 

public class T05 extends Application { 
@Override public void start(Stage primaryStage) throws Exception { 

    System.out.println(System.getProperty("java.runtime.version")); 
    System.out.println(System.getProperty("javafx.runtime.version")); 
    System.out.println(System.getProperty("os.version")); 
    System.out.println(System.getProperty("os.name"));   

    ComboBox c = new ComboBox(); 
    //c.setEditable(true); 
    primaryStage.setScene(new Scene(c)); 
    primaryStage.show(); 

    c.getItems().add("first"); 
    c.getItems().add(null); 

    c.setConverter(new StringConverter<String>(){ 
     @Override public String toString(String object) { 

      System.out.print("converting object: "); 
      if (object==null) { 
       System.out.println("null"); 
       return "[none]"; 
      } 
      System.out.println(object.toString()); 
      return object.toString(); 
     } 

     @Override public String fromString(String string) { 
      throw new RuntimeException("not required for non editable ComboBox"); 
     } 

    }); 

} 

} 

그리고 당신이 if (object==null) 문의 진정한 지사가 호출되지 않습니다 볼 수있는 이곳은 출력이 있습니다. 버그 또는 기능입니까? 아직 null 표현을 사용자 정의 할 수 있습니까?

1.6.0_29-b11 
2.2.3-b05 
6.1 
Windows 7 
converting object: first 
converting object: first 
converting object: first 

갱신
는은 (그냥 주석을 제거) 추가 :

c.setEditable(true); 

내가 다른 행동을 얻을, 즉, 콤보 선택 상자에 널 항목을 클릭, 나는 방법을 얻을 toString이 호출되었지만 결과가 선택 상자에 표시되지 않습니다.

답변

3

사용자가 선택을하지 않으면 comboBox에 "[None]"을 표시하려면 setPromptText 메서드를 사용할 수 있습니다.

샘플 코드 :

comboBox.setValue(null); 

comboBox.setPromptText("[None]"); 
+0

+1 : 이것은 많은 경우에 유효한 해결 될 것으로 보인다. 나는 그것을 테스트했고 작동하지만 comboBox가 편집 가능하지는 않습니다. 정확히 말하면 : 프롬프트 텍스트는 "선택 상자"에 항상 표시되지만 콤보를 편집 할 수있는 경우 "텍스트 필드 영역"에는 표시되지 않습니다. 그러나이 질문은 가능한 버그에 관한 것이므로 원래 질문에 대한 응답으로 간주 할 수 없습니다. 버그있는 동작에 대한 추가 단서로 질문을 업데이트했습니다. – AgostinoX

+0

바로 그게 내가 찾고 있던거야. 감사. –

관련 문제