values seleccionar property jfx item change and combobox javafx fxml

seleccionar - javafx jfx combobox



combobox fxml, obtenga el valor seleccionado en javafx (4)

Creo que el código que tienes en tu pregunta debería funcionar siempre que el caso del identificador del cuadro combinado en el código coincida con el de tu fxml fx:id .

Modifiqué esta aplicación de demostración de selección de cuadro combinado JavaFX fxml para agregar un botón con un método onAction para recuperar un valor del cuadro combinado usando el método comboBox getValue() y funcionó bien para mí.

Verifique el caso, noto que dice que fx:id es sample , pero en su código usa Sample - y los casos deben coincidir, de lo contrario, el cargador de fxml no inyectará correctamente el nodo en su controlador.

Es difícil decir si la NullPointerException en su código está relacionada con el problema de recuperación del valor del cuadro combinado, ya que no dice qué es el código en TW_JAVAFX_Undecorator.ButtonController.pruefen(ButtonController.java:60) o proporciona un código ejecutable completo para replicar el problema .

¿Cómo puedo capturar el valor seleccionado de un cuadro combinado de fxml e implementarlo en una clase javafx?

Le di al combobox el fx: id "muestra" y creé un botón con onAction = "# test" y probé .getValue y .getPromptText.

@FXML private ComboBox<String> Sample; @FXML protected void test( ActionEvent event ) { String output = (String) Sample.getValue(); System.out.println(output); String output = (String) Sample.getPromptText(); System.out.println(output); }

Si intento ejecutarlo obtengo un error:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1440) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28) at javafx.event.Event.fireEvent(Event.java:171) at javafx.scene.Node.fireEvent(Node.java:6863) at javafx.scene.control.Button.fire(Button.java:179) at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193) at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336) at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33) at javafx.event.Event.fireEvent(Event.java:171) at javafx.scene.Scene$MouseHandler.process(Scene.java:3324) at javafx.scene.Scene$MouseHandler.process(Scene.java:3164) at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3119) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1559) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2261) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228) at com.sun.glass.ui.View.handleMouseEvent(View.java:528) at com.sun.glass.ui.View.notifyMouse(View.java:922) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1435) ... 45 more Caused by: java.lang.NullPointerException at TW_JAVAFX_Undecorator.ButtonController.pruefen(ButtonController.java:60) ... 50 more

Gracias por adelantado

Zombi


Estaba tratando de encontrar una respuesta para este error (que me acaba de pasar en las mismas condiciones) y encontré esta publicación.
Si realmente declaró su identificador ComboBox correctamente como dijo jewelsea (si no fuera así, creo que habría aparecido otro error).

El hecho es que todo fue bien declarado (sin error de sintaxis ni error de compilación).
El error está en tiempo de ejecución, la prueba @FXML protected void test(ActionEvent event) eventos @FXML protected void test(ActionEvent event) se está ejecutando cuando se completan / agregan datos a su ComboBox.
Pero la propiedad del valor no está cambiando ya que no se ha detectado ninguna entrada del usuario (supongo que está agregando datos a su ComboBox en otro lugar cuando inicializa la escena).
Entonces getValue() devuelve null.

En este caso, la línea que rompió el código es:

System.out.println(output);

Porque la salida es null .

Trate de poner un punto de corte en el comienzo del método de test(ActionEvent event) .

Espero que esto ayude también a otros.


Para obtener el valor seleccionado de ComboBox, puede usar el método Sample.getSelectionModel .

Ejemplo:

myComboBox.getSelectionModel().selectedItemProperty() .addListener(new ChangeListener<String>() { public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { System.out.println("Value is: "+newValue); } });


Prueba esto:

String output = Sample.getSelectionModel().getSelectedItem().toString(); System.out.println(output);