在 javafx2 应用程序中,ComboBox 应该显示项目列表,在示例中它们String
为简单起见。
该列表包含一个null
项目,因为我希望允许用户别无选择。
由于我正在使用 ComboBox 的转换器属性,我想知道是否可以使用它来为无选择的情况提供一个很好的表示,例如“[none]”而不是空行。
但我发现 toString(Object 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)
语句的真正分支永远不会被调用。它是错误还是功能,是否可以自定义空表示?
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方法,但结果未呈现在选择框中。