写个复选框,要求选择某个框,就提示选了什么,例如有1.2.3.4个选择,选了1就提示,“你选择了:1”,又选了2,则再次提示“你选择了1,2”。整体的都写出来了,也可以运行,但是问题出在选择这,我一选其中一个,就报错。我们用的软件是netbeans,jdk11求解答
//App class
public class App extends Application {
Car extraOptions;
@Override
public void start(Stage primaryStage) {
Label lblExtraOption = new Label("Extra options: ");
CheckBox cbk1 = new CheckBox("Rear-view camera");
CheckBox cbk2 = new CheckBox("GPS");
CheckBox cbk3 = new CheckBox("Satellite navigation");
CheckBox cbk4 = new CheckBox("Airbags");
CheckBox cbk5 = new CheckBox("Extra tinting");
HashSet<String> check = new HashSet<String>();
EventHandler<ActionEvent> Check = (var event) -> {
if (cbk1.isSelected()) {
check.add("Rear-view camera");
} else {
check.remove("Rear-view camera");
}
if (cbk2.isSelected()) {
check.add("GPS");
} else {
check.remove("GPS");
}
if (cbk3.isSelected()) {
check.add("Satellite navigation");
} else {
check.remove("Satellite navigation");
}
if (cbk4.isSelected()) {
check.add("Airbags");
} else {
check.remove("Airbags");
}
if (cbk5.isSelected()) {
check.add("Extra tinting");
} else {
check.remove("Extra tinting");
}
extraOptions.setExtraOptions(check);
System.out.println("You chose extra options: "
+ extraOptions.getExtraOptions());
};
cbk1.setOnAction(Check);
cbk2.setOnAction(Check);
cbk3.setOnAction(Check);
cbk4.setOnAction(Check);
cbk5.setOnAction(Check);
HBox HB7 = new HBox();
HB7.setSpacing(30);
HB7.setPadding(new Insets(10));
HB7.getChildren().addAll(cbk1, cbk2, cbk3, cbk4, cbk5);
HBox HB8 = new HBox();
HB8.setSpacing(30);
HB8.setPadding(new Insets(10));
HB8.getChildren().addAll(cbk2, cbk4, cbk5);
VBox vbox = new VBox();
vbox.setPadding(new Insets(10));
vbox.getChildren().addAll(lblExtraOption, HB7, HB8);
Scene scene = new Scene(vbox, 500, 500);
primaryStage.setTitle("demo");
primaryStage.setScene(scene);
primaryStage.show();
}
}
//Car class
public class Car {
// check boxes
private HashSet<String> extraOptions = new HashSet();
public Car() {
}
public HashSet<String> getExtraOptions() {
return extraOptions;
}
public void setExtraOptions(HashSet<String> extraOptions) {
this.extraOptions = extraOptions;
}
}
//main
public class Main {
public static void main(String[] args) {
launch(App.class, args);
}
}
选择后出错的提示
Picked up _JAVA_OPTIONS: -Xmx1024M
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at demo.CheckBox.App.lambda$start$0(App.java:59)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
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:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8890)
at javafx.scene.control.CheckBox.fire(CheckBox.java:240)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
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:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3862)
at javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2590)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:829)
把以下对象的定义放到函数外面,必须是成员变量
CheckBox cbk1 = new CheckBox("Rear-view camera");
CheckBox cbk2 = new CheckBox("GPS");
CheckBox cbk3 = new CheckBox("Satellite navigation");
CheckBox cbk4 = new CheckBox("Airbags");
CheckBox cbk5 = new CheckBox("Extra tinting");