课程设计。。。纸牌游戏 但需要可视化显示 想利用按钮改变背景表示纸牌反面 但现在就直接全部显示反面结果 不知如何在循环的过程中增加延时的一个一个变换
package card;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GridLayoutDemo extends JFrame {
static int Flag = -1; // 定义一个全局变量作为正反面的判断条件。
private JButton[] JBgroup;
private JButton JB1;
private JPanel panel;
private Container container;
public GridLayoutDemo() {
super("GridLayout");
setSize(850, 650);
container = getContentPane();
container.setBackground(Color.LIGHT_GRAY);
JB1 = new JButton("开始游戏!");
JB1.setFont(new Font("微软雅黑", Font.PLAIN, 14));
JB1.setBackground(Color.lightGray);
JB1.setBounds(860, 50, 100, 25);
JB1.setBorder(BorderFactory.createRaisedBevelBorder());
JB1.addActionListener(new StartListener());
panel = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
panel.setBackground(Color.BLACK);
panel.setLayout(new GridLayout(13, 4, 1, 1));
JBgroup = new JButton[52];
setVisible(true);
for (int x = 1; x <= 13; x++)
for (int y = 1; y <= 4; y++) {
int a = (x - 1) * 4 + y - 1;
JBgroup[a] = new JButton("POKER" + ((x - 1) * 4 + y));
JBgroup[a].setBackground(Color.GREEN);
panel.add(JBgroup[a]);
}
container.add(JB1, borderLayout1.NORTH);
container.add(panel, borderLayout1.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new GridLayoutDemo();
}
class StartListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
int i, j;// 建立两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录。
int[] data = new int[52];
int[] flag = new int[52];
for (i = 1; i <= 52; i++) {
data[i - 1] = i;// 录入52张牌的编号。
flag[i - 1] = 0;// 将相应编号纸牌的翻牌数初始化为0。
}
for (i = 2; i <= 52; i++)// 外循环,基数循环。
{
for (j = 1; j <= 52; j++)// 内循环,基数倍数条件判断。
{
if (j % i == 0) {
data[j - 1] = data[j - 1] * Flag;// 将翻转后的结果更新data中的数据。
flag[j - 1]++;// 翻牌一次,即记入flag数组中。
if (data[j - 1] < 0) {
JBgroup[j - 1].setBackground(Color.yellow);
}
if (data[j - 1] > 0) {
JBgroup[j - 1].setBackground(Color.green);
}
}
}
}
}
}
}