【发布时间】:2021-09-15 07:38:08
【问题描述】:
我正在编写一些具有 UI 并绘制彩虹的代码。有一个复选框,单击时会出现彩虹。如果不勾选,彩虹就会消失。有一个私有类负责复选框所做的操作。里面有一个 if-else 语句,说明如果选中该框,则彩虹的 setVisible 为真,否则为假。我的代码遇到的问题是该框无法正常工作。任何地方似乎都没有任何语法错误,所以我不确定错误在哪里。除了setVisible,我没学过其他方法。
下面是我的代码:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.*;
import javafx.scene.shape.Arc;
import javafx.scene.shape.ArcType;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Rectangle;
public class Main extends Application {
private Pane root;
private CheckBox rainbowBox;
private Rainbow r1;
@Override
public void start(Stage primaryStage) {
root = new Pane();
r1 = new Rainbow(450, 425);
rainbowBox = new CheckBox("rainbow");
rainbowBox.setLayoutX(10);
rainbowBox.setLayoutY(10);
root.getChildren().addAll(rainbowBox);
rainbowEvent showRainbow = new rainbowEvent();
rainbowBox.setOnAction(showRainbow);
Scene scene = new Scene(root, 650, 500);
primaryStage.setTitle("example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
private class Rainbow {
private Group rainbowGroup;
public Rainbow(int x, int y) {
Ellipse circle1 = new Ellipse(x, y, 300, 300);
circle1.setFill(Color.RED);
Ellipse circle2 = new Ellipse(x, y, 290, 290);
circle2.setFill(Color.ORANGE);
Ellipse circle3 = new Ellipse(x, y, 280, 280);
circle3.setFill(Color.YELLOW);
Ellipse circle4 = new Ellipse(x, y, 270, 270);
circle4.setFill(Color.GREEN);
Ellipse circle5 = new Ellipse(x, y, 260, 260);
circle5.setFill(Color.BLUE);
Ellipse circle6 = new Ellipse(x, y, 250, 250);
circle6.setFill(Color.PURPLE);
Ellipse circle7 = new Ellipse(x, y, 240, 240);
circle7.setFill(Color.WHITE);
root.getChildren().addAll(circle1, circle2, circle3, circle4, circle5, circle6, circle7);
}
public Group getNodes() {
return rainbowGroup;
}
}
private class rainbowEvent implements EventHandler<ActionEvent> {
@Override
public void handle(ActionEvent event) {
if (event.getSource() == r1.rainbowGroup) {
r1.rainbowGroup.setVisible(true);
} else {
r1.rainbowGroup.setVisible(false);
}
}
}
}
【问题讨论】:
-
注意:你还没有初始化
rainbowGroup,所以它永远是null。 -
请使用java命名约定
标签: java events javafx methods event-handling