我需要一个组合框,用于显示客户名称,并在选择其一项时提供customerId。 我意识到的组合框以正确的方式工作,但是当它失去焦点时,或者按Enter键时,出现以下错误:

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: java.lang.String cannot be cast to kinema.classi.NomeCodice
    at kinema.ASediController$1.changed(ASediController.java:104)
    at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:347)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
    at javafx.beans.property.ReadOnlyObjectWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyObjectWrapper.java:176)
    at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:142)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:145)
    at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:102)
    at javafx.scene.control.ComboBox$2.changed(ComboBox.java:221)
    at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:347)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
    at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:145)
    at javafx.scene.control.ComboBoxBase.setValue(ComboBoxBase.java:167)
    at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.setTextFromTextFieldIntoComboBoxValue(ComboBoxListViewSkin.java:512)
    at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.access$200(ComboBoxListViewSkin.java:57)
    at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin$3.handle(ComboBoxListViewSkin.java:162)
    at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin$3.handle(ComboBoxListViewSkin.java:150)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
    at com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
    at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
    at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Scene$KeyHandler.process(Scene.java:3949)
    at javafx.scene.Scene$KeyHandler.access$2100(Scene.java:3896)
    at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2036)
    at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2493)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:170)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:123)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:197)
    at com.sun.glass.ui.View.handleKeyEvent(View.java:517)
    at com.sun.glass.ui.View.notifyKey(View.java:927)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
    at java.lang.Thread.run(Thread.java:744)

这是错误的行代码:( ASediController.java:104行代码)。

ComboAzienda.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<NomeCodice>() {
            @Override
            public void changed(ObservableValue<? extends NomeCodice> selected,
                    NomeCodice VecchiaAzienda, NomeCodice NuovaAzienda) {

                try {
                    CaricaAzienda(NuovaAzienda.getIdCodice());
                } catch (SQLException ex) {
                    Logger.getLogger(ASediController.class.getName()).log(Level.SEVERE, null, ex);
                }

            }

        });

这是Nomecodice类别:

public class NomeCodice {
      private  int TIdCodice; 
     private  String TDenominazione ;


    public NomeCodice(String Denominazione,int IdCodice) {
        this.TDenominazione = Denominazione;         
        this.TIdCodice = IdCodice;             
    }  


    public int getIdCodice() {
        return TIdCodice;
    }
    public void setIdCodice(int fCodice) {
        TIdCodice= fCodice;
    }         
    public String getTDenominazione() {
        return TDenominazione;
    }
    public void setTDenominazione(String fDenominazione) {
        TDenominazione = fDenominazione;
    }      


      @Override
       public String toString() {
       return TDenominazione ;
    }
}

我是Java的新手,所以我很确定这是我的错误,但是我无法找到它。 您的建议将不胜感激。

===============>>#1 票数:5

您的ComboBox是可编辑的,但是您没有提供正确的StringConverter作为ComboBox转换器。 像这样设置转换器属性:

ComboAzienda.setConverter(new StringConverter<NomeCodice>() {

    @Override
    public String toString(NomeCodice object) {
        if (object == null) return null;
        return object.toString();
    }

    @Override
    public NomeCodice fromString(String string) {
        // replace this with approquiate implementation of parsing function
        // or lookup function
        return new NomeCodice(string, 0);
    }
});

至少我可以找到尝试重现您的错误的方法。

当然,防止错误的一种更简单的方法是使ComboBox不可编辑,但是我想您是故意使它可编辑的。

  ask by user3552867 translate from so

未解决问题?本站智能推荐:

2回复

java.lang.ClassCastException:java.lang.String无法强制转换为Panels.AddNewClientSaveAction

当我运行下面的代码时出现以下错误:运行: 整个错误: 我正在尝试创建一个功能,在特定文本之前将新用户添加到文本文件中,在这种情况下为“LASTSTUDENTEENTRYLINENNAMES”。 以下是添加新用户“Eddys Rockery”之前和之后的示例。 之前:
2回复

java.lang.ClassCastException:无法将java.lang.String强制转换为Category类型[duplicate]

这个问题已经在这里有了答案: java.lang.ClassCastException 6个答案 我有一个combobox.it有类别名称。所以我需要将字符串传递给类别。 类别类别=(类别)cmbCategory.getSelectedItem(); 这行错误提
4回复

java.lang.ClassCastException:无法将java.lang.String强制转换为[C

我正在使用以下代码将char []转换为字符串,但是它抛出了: java.lang.ClassCastException:无法将java.lang.String强制转换为[C 这里的user.getUserPassword()返回char []。 我还尝试了以下方法:
3回复

java.lang.ClassCastException:实现可打包时无法强制转换为java.lang.String

我对为什么我的parcelable实现确实引发ClassCastException的想法不多了。 我想知道为什么它会引发异常并找到解决方法。如果我仍然缺乏信息以帮助您,请告诉我。 IdModelDTO类 这是我将其用作捆绑包的地方。 在发送到下一个活动之前,我什至可以将它记录为
2回复

Java ComboBox将不会被填充

我已经尽一切努力弄清楚为什么我的组合框不会被填充但什么都没用。 在我的FXML文件中。 在我的控制器中,我有以下内容 我什至尝试过 尝试显示某种数据,但似乎没有任何效果。
3回复

ComboBox FXML默认值

如何使用FXML在ComboBox设置默认值? 我希望默认选择NVT 。 我尝试添加selected="selected"等但似乎没有找到正确的语法。 是否可以使用Scene Builder编辑列出的项目? 我似乎找不到它。
1回复

“ JavaFX应用程序线程” java.lang.IllegalArgumentException:参数类型不匹配

这个问题已经在这里有了答案: JavaFx事件参数类型不匹配 2个答案 当我掺杂组合框时,我收到此错误,我将Javafx与库JFoenix一起使用 这是用户类 并在控制器中 组合框上的动作事件 fxml文件: 方法Affich
1回复

JAVA FX排序组合框值

我有一个组合框cboTEST,其中包含值: U7A U4B U6C U1Z U7B 第一个字母始终为“ U”。 我想首先在第二个数字上排序我的组合框,最后按字母顺序排序: 解决方案结果: U1Z U4B U6
2回复

ComboBox无法转换为TextField吗?

我有一个javafx.scene.control.Control(ArrayList)的ArrayList,带有两个不同的Control Underclasses(组合框,文本字段)。 因此,我想在两个列表中都使用新的Input (示例)来更新列表。 但是当我尝试它时,eclipse