首页 > 解决方案 > 如何使用 EventHandler 在舞台上加载图像?

问题描述

我有这段代码。我想添加图像。在这里,我有一个被分成九个矩形的交叉板。这是一个图像交叉板 |1|2|3| |4|5|6| |7|8|9|

我想加载另一个图像:X.png 或 O.png 如果我单击矩形,例如数字 1,将加载图像。如何在 JavaFx 中做到这一点?可能吗?

import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.canvas.*;
import javafx.scene.web.*;
import javafx.scene.layout.*;
import javafx.scene.image.*;
import java.io.*;
import javafx.geometry.*;
import javafx.scene.Group;

public class background extends Application {

private class Tile extends StackPane {
    private Text text = new Text();

    public Tile() {
        Rectangle border = new Rectangle(200, 200);
        border.setFill(null);
        border.setStroke(Color.BLACK);

        text.setFill(Color.BLACK);
        text.setFont(Font.font("Verdana", FontWeight.BOLD, 95));

        setAlignment(Pos.CENTER);
        getChildren().addAll(border, text);

    }

    private void drawX() {
        text.setText("X");
    }

    private void drawO() {
        text.setText("O");
    }

}

private Parent createContent() {
    Pane root = new Pane();
    root.setPrefSize(600, 600);

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            background.Tile tile = new background.Tile();
            tile.setTranslateX(j * 200);
            tile.setTranslateY(i * 200);

            root.getChildren().add(tile);

        }
    }
    return root;
}


// launch the application 
public void start(Stage stage)
{
    try {


        // set title for the stage
        stage.setTitle("creating Background");

        // create a label 
        Label label = new Label("Name : ");

        // create a text field 
        TextField textfield = new TextField();

        // set preferred column count 
        textfield.setPrefColumnCount(10);

        // create a button 
        Button button = new Button("OK");

        // add the label, text field and button
        HBox hbox = new HBox(label, textfield, button);

        // set spacing
    //    hbox.setSpacing(10);

        // set alignment for the HBox 
    ///    hbox.setAlignment(Pos.CENTER);

        // create a scene 
        Scene scene = new Scene(hbox, 600, 600);

        // create a input stream 
        FileInputStream input = new FileInputStream("c:\\fill.png");

        // create a image 
        Image image = new Image(input);

        // create a background image 
        BackgroundImage backgroundimage = new BackgroundImage(image,
                BackgroundRepeat.NO_REPEAT,
                BackgroundRepeat.NO_REPEAT,
                BackgroundPosition.DEFAULT,
                BackgroundSize.DEFAULT);

        // create Background 
        Background background = new Background(backgroundimage);

        // set background 
        hbox.setBackground(background);

        // set the scene 
        stage.setScene(scene);

        stage.show();
    }

    catch (Exception e) {

        System.out.println(e.getMessage());
    }
}

// Main Method 
public static void main(String args[])
{

    // launch the application 
    launch(args);
}

}

标签: javajavafx

解决方案


您可以做的一件很酷的事情是设置一个GridPane对象并使用它来显示交叉板,然后更改内部对象的状态(也可以使用按钮,或者带有背景的简单窗格)以将其显示为一个圆圈或一个十字。这确实是您需要意识到的。

在此处输入图像描述

在里面,你可以放置一个对象来监听点击,你就可以很容易地模拟井字游戏。
您可以使用内部变量将游戏的当前状态保存在内存中。
试一试。


推荐阅读