首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javafx-2 ComboBox转换器:未调用空值的方法toString(T对象)

javafx-2 ComboBox转换器:未调用空值的方法toString(T对象)
EN

Stack Overflow用户
提问于 2012-11-20 21:39:51
回答 1查看 5.7K关注 0票数 1

在javafx2应用程序中,ComboBox应该提供一个条目列表,在示例中,它们是String的,以实现简单性。

此列表包含一个null项,因为我希望允许用户做出任何选择。

由于我正在处理ComboBox的转换器属性,所以我想知道是否可以使用它为无法选择的情况提供一个很好的表示,例如“无”而不是空行。

但是我发现toString(对象对象)从未被调用为空项。

下面是再现大小写的最短代码。包括版本信息。

代码语言:javascript
复制
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)语句的真正分支。它是一个bug还是一个特性,并且还可以自定义空表示吗?

代码语言:javascript
复制
 1.6.0_29-b11
 2.2.3-b05
 6.1
 Windows 7
 converting object: first
 converting object: first
 converting object: first

更新

添加一个(只需取消注释):

代码语言:javascript
复制
c.setEditable(true);

我得到另一种行为,即单击组合框中的空项,得到调用的方法toString,但结果没有显示在选择框中。

EN

回答 1

Stack Overflow用户

发布于 2012-11-21 00:42:21

如果用户没有选择,可以使用setPromptText方法在comboBox中显示“无”。

样本代码:

代码语言:javascript
复制
comboBox.setValue(null);

comboBox.setPromptText("[None]");
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13482662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档