fxml combobox, obtener el valor seleccionado en javafx

¿cómo puedo tomar el valor seleccionado de un fxml combobox y la implementan en un javafx clase?

me dio el combobox el fx:id “ejemplo” y se crea un botón con onAction=”#test” y lo intentó .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 trato de ejecutarlo me sale 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 de antemano

Zombie

OriginalEl autor user2361460 | 2013-05-08

4 respuestas

  1. 6

    Creo que el código que tienes en tu pregunta debería funcionar siempre como el caso de los combobox identificador en el código coincide con la de su fxml fx:id.

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

    Comprobar el caso de las cosas, me doy cuenta de que te dicen que la fx:id es sample, sin embargo, en el código que uso Sample – y los casos deben coincidir de lo contrario el fxml cargador de no inyectar el nodo en su controlador correctamente.

    Difícil decir si el NullPointerException en su código está relacionado con el valor del cuadro combinado de recuperación de la cuestión, ya que no dicen lo que el código en TW_JAVAFX_Undecorator.ButtonController.pruefen(ButtonController.java:60) es o proporcionar plena código ejecutable para replicar el problema.

    OriginalEl autor jewelsea

  2. 29

    Intente esto:

    String output = Sample.getSelectionModel().getSelectedItem().toString();
    System.out.println(output);
    Esto me ayudó ! Yo estaba buscando el método correcto para obtener el índice seleccionado y punto, porque getValue está en otra parte y el elemento seleccionado está aquí.
    De la muestra.getSelectionModel().getSelectedIndex()
    La fundición es redundante. toString() es siempre de tipo String.

    OriginalEl autor RayFoX

  3. 2

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

    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);
    }
    });
    gracias funcionó para mí .

    OriginalEl autor Maulik Patel

  4. 0

    Yo estaba tratando de encontrar una respuesta a este error (que se que me ha pasado en las mismas condiciones) y encontré este post.

    Si efectivamente declarado su ComboBox identificador correctamente como jewelsea dijo (Si no de todos modos creo que otro error que habría aparecido).

    El hecho es que todo estaba bien declarado (no hay error de sintaxis o la compilación de error).

    El error en tiempo de ejecución, el evento @FXML protected void test(ActionEvent event) se ha de ejecutar cuando se llene/agregar datos a su ComboBox.

    Pero valor de la propiedad no es el cambio de puesto ninguna entrada de usuario ha sido detectado (estoy asumiendo que usted está agregando datos a su ComboBox en otro lugar cuando se inicializa la Escena).

    Así getValue() es devolver null.

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

    System.out.println(output);

    Porque la salida es null.

    Tratar de poner un punto de interrupción en el principio de test(ActionEvent event) método.

    Espero que esta ayuda también a los demás.

    OriginalEl autor hmojica

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *