Java橡皮条技术加上颜色选择和清空功能

请问这个要怎么改比较好呢,我想在橡皮条的技术的基础上加一个颜色选择器和清空线条的功能,但是一直不知道怎么改错

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.StackPane;

public class RubberLines2 extends Application
{
    private Line currentLine;//橡皮条画线
    private ColorPicker colorPicker;//颜色选择器
    private Group root;
    private Group group2;
    private RadioButton clearButton;//清空屏幕线条按钮
    public Scene scene;

    public void start(Stage primaryStage)
    {
        colorPicker = new ColorPicker(Color.BLACK);
        colorPicker.setOnAction(this::processColorChoice);
        
        Scene scene = new Scene(root, 500, 300, Color.BLACK);       
        scene.setOnMousePressed(this::processMousePress);
        scene.setOnMouseDragged(this::processMouseDrag);
      
        clearButton = new RadioButton("clear");
        clearButton.setOnAction(this::processRadioButtonAction);       
        
        VBox pickers = new VBox(colorPicker, clearButton);//垂直组合放置颜色选择器和清空按钮
        pickers.setSpacing(20);
        pickers.setAlignment(Pos.BASELINE_LEFT);//左上角
        
            
        root = new Group();
        group2 = new Group();
        root.getChildren().add(currentLine);//所有橡皮条线组合
        group2.getChildren().addAll(root, pickers);//所有橡皮条线root和垂直组合pickers放一起

        primaryStage.setTitle("Rubber Lines");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public void processMousePress(MouseEvent event)
    {
        currentLine = new Line(event.getX(), event.getY(), event.getX(), event.getY());
        currentLine.setStroke(Color.CYAN);
        currentLine.setStrokeWidth(3);
    }

    public void processMouseDrag(MouseEvent event)
    {
        currentLine.setEndX(event.getX());
        currentLine.setEndY(event.getY());
    }
    
     public void processColorChoice(ActionEvent event)//颜色选择
    {
        currentLine.setFill(colorPicker.getValue());
    }
    
    public void processRadioButtonAction(ActionEvent event)//清空线条选择
    {
        if (clearButton.isSelected())
            root.getChildren().clear();
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}


有用望点击采纳
首相将颜色选择器和清空按钮放入一个更大的容器中,并将其与画布放在同一组中。例如创建一个 StackPane(堆栈面板),然后将画布和垂直布局组件放入其中。代码如下:

StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(root, pickers);

接着,在 processMousePress 方法中,获取当前选定的颜色,然后将其设置为当前线条的描边颜色:

currentLine.setStroke(colorPicker.getValue());

最后,在按钮的事件处理程序中,清除所有线条。使用 root 组来保存和管理所有线条,使用 getChildren().clear() 方法来删除该组中的所有子元素。

完整的修改代码如下:


import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.StackPane;

public class RubberLines2 extends Application
{
    private Line currentLine;//橡皮条画线
    private ColorPicker colorPicker;//颜色选择器
    private Group root;
    private Group group2;
    private RadioButton clearButton;//清空屏幕线条按钮
    public Scene scene;

    public void start(Stage primaryStage)
    {
        colorPicker = new ColorPicker(Color.BLACK);
        colorPicker.setOnAction(this::processColorChoice);

        Scene scene = new Scene(root, 500, 300, Color.BLACK);       
        scene.setOnMousePressed(this::processMousePress);
        scene.setOnMouseDragged(this::processMouseDrag);

        clearButton = new RadioButton("clear");
        clearButton.setOnAction(this::processRadioButtonAction);       
        
        VBox pickers = new VBox(colorPicker, clearButton);//垂直组合放置颜色选择器和清空按钮
        pickers.setSpacing(20);
        pickers.setAlignment(Pos.BASELINE_LEFT);//左上角

        root = new Group();
        StackPane stackPane = new StackPane(); // 堆栈面板用于包含绘图区域和控件区域
        stackPane.getChildren().addAll(root, pickers); 
        primaryStage.setTitle("Rubber Lines");
        primaryStage.setScene(new Scene(stackPane, 500, 300));
        primaryStage.show();
    }

    public void processMousePress(MouseEvent event)
    {
        currentLine = new Line(event.getX(), event.getY(), event.getX(), event.getY());
        currentLine.setStroke(colorPicker.getValue());
        currentLine.setStrokeWidth(3);
        root.getChildren().add(currentLine);
    }

    public void processMouseDrag(MouseEvent event)
    {
        currentLine.setEndX(event.getX());
        currentLine.setEndY(event.getY());
    }

     public void processColorChoice(ActionEvent event)//颜色选择
    {
        currentLine.setStroke(colorPicker.getValue());
    }

    public void processRadioButtonAction(ActionEvent event)//清空线条选择
    {
        if (clearButton.isSelected())
            root.getChildren().clear();
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}