在单击按钮 JavaFX 上创建一个圆圈

Create a Circle on Clicking Button JavaFX

我尝试通过单击按钮来创建新形状(本例中为圆形)。 我还没有完全使用 JavaFX,所以在执行时存在一些小问题。我熟悉更改现有形状的大小、颜色等,但我不知道如何通过单击创建一些东西。 到目前为止,我的控制器和主控制器:

package javafxapplication1;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

/**
 *
 * @author Tom
 */
public class JavaFXApplication1 extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

--------------------这里启动控制器----------------

package javafxapplication1;

import java.awt.Paint;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

/**
 *
 * @author Tom
 */
public class FXMLDocumentController implements Initializable {

    @FXML
    private Button btn;


    @FXML
    public void pressButton(ActionEvent event){
       Circle kreis1;
        kreis1 = new Circle(200, 200, 10, Color.BLACK);

    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
}

你能帮帮我吗?我需要这些基础知识,但在网上找不到任何解释!提前致谢!

其实你差不多做到了,只漏了两点。

首先你没有包含 FXMLDocument.fxml 但我假设 pressButton 方法绑定到按钮的 onAction 事件。

您在按钮操作上创建了一个 Circle,现在您需要将该圆圈添加到窗格中。如果不添加到窗格,将看不到该圆圈。

例如,如果我们有这个 fxml;

<AnchorPane fx:id="root" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <Button fx:id="btn" layoutX="271.0" layoutY="331.0"  onAction="#pressButton" text="Button" />
   </children>
</AnchorPane>

我们有一个带 fx:id="root" 的 AnchorPane,我们想在按钮操作时向其添加圆圈。

现在在我们的控制器中class,我们需要绑定AnchorPane

@FXML private AnchorPane root;

现在只需在您的 pressButton 方法中将您的圈子添加到此根。

@FXML
public void pressButton(ActionEvent event){
   Circle kreis1;
   kreis1 = new Circle(200, 200, 10, Color.BLACK);
   root.getChildren().add(kreis1);
}

这将在 x,y 坐标 200,200 中创建一个圆。

例如,此 pressButton 方法会在窗格中创建具有随机坐标和随机颜色的圆。

@FXML
public void pressButton(ActionEvent event) {

    Random rand = new Random();
    int  x = rand.nextInt(500) + 1;
    int  y = rand.nextInt(400) + 1;
    int r = rand.nextInt(40) + 10;
    double red = rand.nextDouble();
    double green = rand.nextDouble();
    double blue = rand.nextDouble();

    Circle kreis1;
    kreis1 = new Circle(x, y, r, new Color(red, green, blue,1));

    root.getChildren().add(kreis1);
}