fxmlコンボボックスの選択された値をキャッチしてjavafxクラスに実装するにはどうすればよいですか?
コンボボックスにfx:id "sample"を指定し、onAction = "#test"でボタンを作成し、.getValueと.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);
}
実行しようとするとエラーが発生します:
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
前もって感謝します
ゾンビ
あなたの質問にあるコードは、コード内のコンボボックス識別子のケースがfxml fx:id
のそれと一致する限り機能するはずです。
この JavaFX fxmlコンボボックス選択デモンストレーションアプリ を変更して、comboBox getValue()
メソッドとそれは私のためにうまくいった。
事案を確認してください。fx:id
はsample
ですが、コードではSample
を使用していることに注意してください。そうでない場合、fxmlローダーは一致しません。ノードをコントローラーに正しく挿入します。
TW_JAVAFX_Undecorator.ButtonController.pruefen(ButtonController.Java:60)
のコードが何であるかを言わないか、問題を再現するための完全な実行可能コードを提供しないため、コード内のNullPointerException
がコンボボックスの値取得の問題に関連する場合は言いにくいです。
これを試して:
String output = Sample.getSelectionModel().getSelectedItem().toString();
System.out.println(output);
ComboBoxの選択値を取得するには、Sample.getSelectionModel
メソッドを使用できます。
例:
myComboBox.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue) {
System.out.println("Value is: "+newValue);
}
});
私はこのエラーの答えを見つけようとしていました(同じ状況で私に起こったことです)。この投稿を見つけました。
実際にjewelseaが言ったようにComboBox識別子を正しく宣言した場合(とにかくそうでない場合は、他のエラーが表示されると思います)。
実際、すべてが適切に宣言されています(構文エラーやコンパイルエラーはありません)。
エラーはランタイムにあり、ComboBoxにデータを入力/追加すると、イベント@FXML protected void test(ActionEvent event)
が実行されます。
ただし valueプロパティは、ユーザー入力が検出されていないため変更されていません(シーンを初期化するときにComboBoxにデータを追加していると想定しています)。
したがって、getValue()
はnullを返します。
この場合、コードを壊した行は次のとおりです。
_System.out.println(output);
_
出力はnull
であるためです。
test(ActionEvent event)
メソッドの先頭にブレークポイントを配置してください。
他の人にも役立つと期待しています。