猿问

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

我无法单击一个按钮,然后单击另一个按钮与之前单击的按钮交换。然后将第一个单击的按钮设为空白按钮。


我想不出该怎么做。我只是尝试使用 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();

    }

}


DIEA
浏览 97回答 1
1回答

一只名叫tom的猫

以下是交换 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);    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答