有没有办法让程序本身为我按下按钮?我需要制作一个类似于国际象棋的游戏,让玩家与程序对战。我为此制作了一个二维按钮数组。这就是为什么我需要一种程序为我按下按钮的方法。我正在使用摇摆 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);
}
}