为了账号安全,请及时绑定邮箱和手机立即绑定

在国际象棋游戏的网格窗格中交换节点

在国际象棋游戏的网格窗格中交换节点

DIEA 2023-04-26 15:09:27
我无法单击一个按钮,然后单击另一个按钮与之前单击的按钮交换。然后将第一个单击的按钮设为空白按钮。我想不出该怎么做。我只是尝试使用 if 语句,例如If button = this{                 //this should find the first button    if button = that{             //this should find the second button       that = this                //this swaps the buttons    }   this = blank                  //and ends with making the first button blank}这不起作用,因为它直接通过了第二个 if 语句,并使第一个按钮空白而不交换任何内容。没有太多代码可以使用,这只是测试代码来弄清楚这个单一的动作public class SimpleButtonSwapper extends Application {    public static void main(String[] args) {        launch(args);    }    @Override    public void start(Stage stage) {        GridPane pane = new GridPane();        pane.setPadding(new Insets(50, 50, 50, 50));           //creates 50 pixel padding        pane.setVgap(2);        pane.setHgap(2);        Scene scene = new Scene(pane);        Canvas canvas = new Canvas(50, 400);        GraphicsContext graphics = canvas.getGraphicsContext2D();        pane.getChildren().add(canvas);        stage.setTitle("Chess");        Button[] buttons = new Button[6];        for (int i = 0; i < 6; i++) {            buttons[i] = new Button();            buttons[i].setText("banana " + i);        }        for (int i = 0; i < 6; i++) {            pane.add(buttons[i], i, 0);        }        for (int i = 0; i < 6; i++) {            buttons[i].setOnAction(new EventHandler<ActionEvent>() {                @Override                public void handle(ActionEvent event) {                }            });        }        stage.setScene(scene);        stage.show();    }}
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

以下是交换 a 中的两个按钮的mreGridPane

import javafx.application.Application;

import javafx.geometry.Insets;

import javafx.scene.Node;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.layout.GridPane;

import javafx.scene.layout.Pane;

import javafx.scene.layout.VBox;

import javafx.scene.text.Text;

import javafx.stage.Stage;


public class FxMain extends Application {


    private static final int COLS = 5, ROWS = 5;

    private int clickCounter = 0;

    private GridPane grid;

    private Button first, second;


    @Override

    public void start(Stage primaryStage){


        VBox root = new VBox(10);

        root.setPadding(new Insets(10));

        root.getChildren().addAll(makeGrid(), new Text("Click 2 buttons to swap them"));

        primaryStage.setScene(new Scene(root));

        primaryStage.sizeToScene();

        primaryStage.show();

    }


    private Pane makeGrid() {


        grid = new GridPane();

        for(int rowIndex = 0; rowIndex < ROWS ; rowIndex++) {

            //an array to hold buttons of one row 

            Node[] nodes = new Node[COLS];

            for(int colIndex = 0; colIndex < COLS ; colIndex++) {

                Button node= new Button(rowIndex+""+colIndex);

                node.setOnAction(e->buttonCliked(e.getSource())); //add action listener 

                node.prefHeight(100); node.prefWidth(100);

                nodes[colIndex]= node;

            }

            grid.addRow(rowIndex, nodes);

        }

        return grid;

    }


    private void buttonCliked(Object source) {


        if(!(source instanceof Button)) return;

        Button button  = (Button)source;


        if(clickCounter == 0){

            first = button;

        }else{

            second = button;

            swap();

        }


        System.out.println(clickCounter + " " + ((Button)source).getText()    );

        clickCounter=  ++clickCounter %2 ;  // changes values between 0 1

    }


    private void swap() {

        int firstRow = GridPane.getRowIndex(first);

        int firstCol = GridPane.getColumnIndex(first);

        int secondRow = GridPane.getRowIndex(second);

        int secondCol = GridPane.getColumnIndex(second);

        grid.getChildren().removeAll(first, second);

        grid.add(first, secondCol, secondRow);

        grid.add(second, firstCol, firstRow);

    }


    public static void main(final String[] args) {

        launch(args);

    }

}


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信