当前位置: 首页 > 知识库问答 >
问题:

javafx-2组合框转换器:未为空值调用方法toString(T对象)

彭修筠
2023-03-14

在javafx2应用程序中,ComboBox应该显示一个项目列表,在示例中,为了简单起见,它们是Strings。

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

因为我在玩ComboBox的转换器属性,我想知道我是否可以用它来为无选择的情况提供一个很好的表示,例如“[无”而不是空行。
但是我发现toString(对象对象)是从来没有要求空项目。

下面是复制案例的最短代码。包括版本信息。

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");
        }

    });

}

}

这里是输出,因为您可以看到的真正分支,如果(ject==null)语句从未被调用。它是一个bug还是一个特性,是否还可以自定义空表示?

 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);

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

共有1个答案

利俊迈
2023-03-14

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

示例代码:

comboBox.setValue(null);

comboBox.setPromptText("[None]");
 类似资料:
  • 问题内容: 我刚刚开始学习JavaFX2。 现在,我正在尝试构建示例应用程序。然后我陷入了组合框。 我没有在JavaFX中找到对组合框的键值对的任何引用。http://docs.oracle.com/javafx/2/api/index.html上 的组合框javadoc 对键值对的描述不多。 如何创建包含显示值和实际值不同的项目的组合框? 问题答案: 您有2种方法: 1.简单地覆盖数据模型类中的

  • 问题内容: 嗨,我在表格中将使用空值来填充组合框。我不确定该怎么做。当我运行以下代码时,出现错误: 数据为空。不能在空值上调用此方法或属性。 我需要帮助,并且是MySQL的新手 编码 : 问题答案: 当您的一个或多个字段包含NULL(DBNull.Value)时,您将无法对其使用。 您需要使用IsDBNull方法检查它们是否为空,然后选择要在文本框中输入的值。通常是一个空字符串 我建议也围绕一次性

  • 我只是想说清楚,我的意思是这样的- 另外,如果我访问第一个数组以外的元素,也会遇到同样的问题,即(INT*)arr+13。它会属于越界访问的条款吗?因为我是在第一个数组的边界之外访问的。

  • 根据这个留档, 这些对象中的每一个的字符串表示都按照列出的顺序附加在一起并输出。 同样根据答案 x将对象x强制为一个字符串,即[object object]: 所以,我的问题是 如果我这样做 因此,在第一种情况下,它只打印对象(不调用方法)。 但是在第二种情况下,它不强制而是简单地打印原始值。为什么会这样呢? 哪种方法不支持调用以打印对象? 请注意-这不是这个问题的重复。

  • 我的表单上有2个组合框(在表单加载事件中)。第一个组合框在表单加载后从选择语句中获取一个值。我想在我的第二个组合框中使用该值。这是我的代码: 1st组合框= cbDelivery 2de组合框= cbOrderNo 此组合框位于: private void CB delivery _ selectedindex changed(对象发送方,事件参数e) 因此,一旦我从1ste组合框中选择一个值,我

  • 我有一个标题中描述的问题。 问题的小说明如下:我有一个按钮,用来打开对话框。然后,在该对话框中,有一个按钮,可以在第一个对话框的顶部打开另一个对话框。单击第二个按钮后,我希望调用控制器中的方法,但什么也没发生。h:outputText中的值被正确读取,所以我猜这不是连接控制器的问题- 我用的是: Spring web 3.1.2.发布 JSF 2.2.10 Primeface 5.1 代码: 豆。