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