我不是神仙,自己写的源码,哪怕是抄一遍,放入blog以备随时可以查看,借鉴。 package com.gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; public class OpenWindows { public static void main(String[] arg0) { JFrame frame = new JFrame("OpenWindows"); frame.getContentPane().add(new MainPanel()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } } /** * 主面板 * * @author hzkf */ class MainPanel extends JPanel { SquarePanel sp = new SquarePanel(); controlPanel cp = new controlPanel(sp); public MainPanel() { this.setLayout(new BorderLayout()); this.add(sp, BorderLayout.CENTER); this.add(cp, BorderLayout.SOUTH); } } /** * 方块面板 * * @author hzkf */ class SquarePanel extends JPanel { JButton[] winbutton = new JButton[25]; Color c; public SquarePanel() { // 采用网格布局管理 this.setLayout(new GridLayout(5, 5)); for (int i = 0; i < 25; i++) { winbutton[i] = new JButton(); winbutton[i].setActionCommand(String.valueOf(i)); // 获取默认颜色 c = winbutton[i].getBackground(); winbutton[i].addActionListener(new OpenWindowListener()); this.add(winbutton[i]); } // 面板大小之为200*200 this.setPreferredSize(new Dimension(200, 200)); } /** * @author hzkf */ class OpenWindowListener implements ActionListener { public void actionPerformed(ActionEvent e) { // 获取被单击窗户的ID int x = Integer.parseInt(e.getActionCommand()); select(x);// 设置被单击窗户被选中 isWin(); } // 当一个窗户被选中时进行的操作,需要改变周围window的颜色。 private void select(int x) { if (x == 0) { changeColor(winbutton[x]); changeColor(winbutton[x + 1]); changeColor(winbutton[x + 5]); } else if (x > 0 && x < 4) { changeColor(winbutton[x - 1]); changeColor(winbutton[x + 1]); changeColor(winbutton[x + 5]); } else if (x == 4) { changeColor(winbutton[x]); changeColor(winbutton[x - 1]); changeColor(winbutton[x + 5]); } else if (x == 20) { changeColor(winbutton[x]); changeColor(winbutton[x - 5]); changeColor(winbutton[x + 1]); } else if (x == 24) { changeColor(winbutton[x]); changeColor(winbutton[x - 5]); changeColor(winbutton[x - 1]); } else if (x > 20 && x < 24) { changeColor(winbutton[x]); changeColor(winbutton[x - 5]); changeColor(winbutton[x - 1]); changeColor(winbutton[x + 1]); } else if (x % 5 == 0) { changeColor(winbutton[x]); changeColor(winbutton[x - 5]); changeColor(winbutton[x + 1]); changeColor(winbutton[x + 5]); } else if (x % 5 == 4) { changeColor(winbutton[x]); changeColor(winbutton[x - 5]); changeColor(winbutton[x - 1]); changeColor(winbutton[x + 5]); } else { changeColor(winbutton[x]); changeColor(winbutton[x - 5]); changeColor(winbutton[x - 1]); changeColor(winbutton[x + 1]); changeColor(winbutton[x + 5]); } } // 改变周围颜色的函数 private void changeColor(JButton winbutton) { if (winbutton.getBackground() == c) { winbutton.setBackground(Color.green); } else { winbutton.setBackground(c); } } // 判断是否胜出 private void isWin() { int a = 1; for (int i = 0; i < 25; i++) { if (winbutton[i].getBackground() == Color.green) { a++; } } if (a > 25) { JOptionPane.showMessageDialog(null, "恭喜过关"); } } } } /** * 控制面板 * * @author hzkf */ class controlPanel extends JPanel { JLabel label = new JLabel("Open Window Game"); JButton restart = new JButton("reset"); SquarePanel sp; public controlPanel(SquarePanel sp) { this.sp = sp; restart.addActionListener(new Reset()); this.add(restart); this.add(label); } class Reset implements ActionListener { public void actionPerformed(ActionEvent e) { for (int i = 0; i < 25; i++) { sp.winbutton[i].setBackground(sp.c); } } } }