-4

有没有办法让程序本身为我按下按钮?我需要制作一个类似于国际象棋的游戏,让玩家与程序对战。我为此制作了一个二维按钮数组。这就是为什么我需要一种程序为我按下按钮的方法。我正在使用摇摆 JButton。我的意思是,有没有一种方法或什么可以让我自己按下按钮?

我的程序有效,但是是玩家对玩家。这里是:

    package ratsuk;

    import javax.swing.JFrame;
    import javax.swing.JButton;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.AbstractButton;
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JPanel;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JOptionPane;


    /**
     *
     * @author Melvin
     */
    public class Tablero {

        private static final int HEIGHT = 8;
        private static final int WIDTH = 8;
        private JButton[][] mesa;
        private Icon image;
        private JPanel panel;
        private JFrame ventana;

        public Tablero() {
            ventana = new JFrame();
            mesa = new JButton[HEIGHT][WIDTH];
            panel = new JPanel(new GridLayout(HEIGHT, WIDTH));
            image = new ImageIcon(getClass().getResource("redKnight.gif"));

            crearventana();

            crearmesa();

            pintarmesa();
        }

        private void crearventana() {
            Menu men =new Menu();
            setVentana(new JFrame("Juego de Ratsuk"));
            getVentana().setVisible(true);
            getVentana().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            getVentana().setLayout(new BorderLayout());
            getVentana().setSize(375, 500);
            getVentana().add(panel , BorderLayout.NORTH);
            getVentana().add(men.getPanel1(),BorderLayout.SOUTH);

            getVentana().setVisible(true);
        }

        private void crearmesa() {

            for (int row = 0; row < HEIGHT; row++) {
                for (int column = 0; column < WIDTH; column++) {
                    JButton button = new JButton();
                    button.setPreferredSize(new Dimension(40, 40));

                    mesa[row][column] = button;
                    panel.add(button);

                }
            }
        }

        private void pintarmesa() {
            Color fondo;
            for (int r = 0; r < HEIGHT; r++) {
                for (int t = 0; t < WIDTH; t++) {
                    fondo = getBackgroundColor(r, t);

                    mesa[r][t].setBackground(fondo);
                }
            }
        }

        private Color getBackgroundColor(int r, int t) {
            Color fondo;
            if (r % 2 == 0 || r == 0) {
                if (t % 2 == 0 || t == 0) {
                    fondo = Color.BLACK;
                } else {
                    fondo = Color.WHITE;
                }
            } else {
                if (t % 2 == 0 || t == 0) {
                    fondo = Color.WHITE;
                } else {
                    fondo = Color.BLACK;
                }
            }
            return fondo;
        }

        public void caballo(final int row, final int column) {
            if (conclucion(row, column)) {
                JOptionPane.showMessageDialog(null, "The game End");
            } else {
                final JButton current = mesa[row][column];

                current.setIcon(image);
              //  panel.repaint();

                acciones(row, column, current);
            }
        }

        public void acciones(final int row, final int column, final JButton current) {
            ActionListener[] bu;

            for (int i = 0; i < HEIGHT; i++) {
                for (int j = 0; j < WIDTH; j++) {
                    bu = mesa[i][j].getActionListeners();
                    for (int k = 0; k < bu.length; k++) {
                        bu = mesa[i][j].getActionListeners();
                        mesa[i][j].removeActionListener(bu[k]);
                    }
                }
            }
            for (int i = 0; i < HEIGHT; i++) {
                for (int j = 0; j < WIDTH; j++) {
                    mesa[i][j].addActionListener(e(row, column, current));

                    ((AbstractButton) current).setEnabled(false);
                    current.setBackground(Color.RED);
                }
            }
        }

        public ActionListener e(final int row, final int column,
                final JButton current) {
            return new ActionListener() {
                public void actionPerformed(ActionEvent e) {






                    if (tienebotton(row + 2, column + 1)) {
                        if (e.getSource() == mesa[row + 2][column + 1]) {

                            current.setIcon(null);
                            caballo(row + 2, column + 1);


                        }
                    }
                    if (tienebotton(row + 2, column - 1)) {
                        if (e.getSource() == mesa[row + 2][column - 1]) {

                            current.setIcon(null);
                            caballo(row + 2, column - 1);


                        }
                    }
                    if (tienebotton(row - 2, column - 1)) {
                        if (e.getSource() == mesa[row - 2][column - 1]) {

                            current.setIcon(null);
                            caballo(row - 2, column - 1);



                        }
                    }
                    if (tienebotton(row - 2, column + 1)) {
                        if (e.getSource() == mesa[row - 2][column + 1]) {

                            current.setIcon(null);
                            caballo(row - 2, column + 1);



                        }
                    }

                    if (tienebotton(row + 1, column + 2)) {
                        if (e.getSource() == mesa[row + 1][column + 2]) {

                            current.setIcon(null);
                            caballo(row + 1, column + 2);


                        }
                    }
                    if (tienebotton(row - 1, column + 2)) {
                        if (e.getSource() == mesa[row - 1][column + 2]) {

                            current.setIcon(null);
                            caballo(row - 1, column + 2);

                            ((AbstractButton) e.getSource()).setEnabled(false);

                        }
                    }
                    if (tienebotton(row + 1, column - 2)) {
                        if (e.getSource() == mesa[row + 1][column - 2]) {

                            current.setIcon(null);
                            caballo(row + 1, column - 2);



                        }
                    }
                    if (tienebotton(row - 1, column - 2)) {
                        if (e.getSource() == mesa[row - 1][column - 2]) {

                            current.setIcon(null);
                            caballo(row - 1, column - 2);


                        }
                    }
                }
            };
        }

        public boolean tienebotton(int row, int column) {
            return (row >= 0 && row < HEIGHT && column >= 0 && column < WIDTH);

        }

        public boolean conclucion(int row, int column) {
            boolean estado, estado1, estado2, estado3, estado4, estado5, estado6, estado7;

            if (tienebotton(row + 2, column + 1)) {
                estado = mesa[row + 2][column + 1].isEnabled();
            } else {
                estado = false;
            }
            if (tienebotton(row + 2, column - 1)) {
                estado1 = mesa[row + 2][column - 1].isEnabled();
            } else {
                estado1 = false;
            }
            if (tienebotton(row - 2, column + 1)) {
                estado2 = mesa[row - 2][column + 1].isEnabled();
            } else {
                estado2 = false;
            }
            if (tienebotton(row - 2, column - 1)) {
                estado3 = mesa[row - 2][column - 1].isEnabled();
            } else {
                estado3 = false;
            }
            if (tienebotton(row + 1, column + 2)) {
                estado4 = mesa[row + 1][column + 2].isEnabled();
            } else {
                estado4 = false;
            }
            if (tienebotton(row - 1, column + 2)) {
                estado5 = mesa[row - 1][column + 2].isEnabled();
            } else {
                estado5 = false;
            }
            if (tienebotton(row + 1, column - 2)) {
                estado6 = mesa[row + 1][column - 2].isEnabled();
            } else {
                estado6 = false;
            }
            if (tienebotton(row - 1, column - 2)) {
                estado7 = mesa[row - 1][column - 2].isEnabled();
            } else {
                estado7 = false;
            }
            return (estado == false && estado1 == false && estado2 == false && estado3 == false && estado4 == false && estado5 == false && estado6 == false && estado7 == false);
        }

        /**
         * @return the ventana
         */
        public JFrame getVentana() {
            return ventana;
        }

        /**
         * @param ventana the ventana to set
         */
        public void setVentana(JFrame ventana) {
            this.ventana = ventana;
        }
    }


package ratsuk;

import java.util.Random;
import javax.swing.JFrame;

/**
 * import javax.swing.JFrame; import javax.swing.SwingUtilities; import
 * javax.swing.UIManager;
 */
public class Ratsuk extends JFrame {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Random rad;
        rad = new Random();
        int row = rad.nextInt(8);
        int column = rad.nextInt(8);



      Tablero newtablero = new Tablero();

        newtablero.caballo(row, column);



    }
}
4

1 回答 1

1

根据您的代码结构,最简单的方法是:

button.doClick();

另一种选择是让您的 ActionListener 在单击按钮时调用一个方法。然后在您的程序中,您可以手动调用相同的方法。

于 2013-06-22T17:19:59.930 回答