最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)掃雷小游戲

 更新時間:2020年01月21日 14:30:02   作者:qq_45892474  
這篇文章主要為大家詳細介紹了java實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)掃雷小游戲的具體代碼,供大家參考,具體內容如下

代碼:

package GUI;

import java.util.Random;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Font;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.InputEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.ImageIcon;
import javax.swing.BorderFactory;
import javax.swing.border.EmptyBorder;

public class MineSweeperFrame extends JFrame {
 // 游戲模式編號
 public static final int Custom_Mode = 0;
 public static final int Elementary_Mode = 1;
 public static final int Intermediate_Mode = 2;
 public static final int Advanced_Mode = 3;
 // 游戲模式參數(shù)
 public static final int[] Elementary = {9, 9, 10, Elementary_Mode};
 public static final int[] Intermediate = {16, 16, 40, Intermediate_Mode};
 public static final int[] Advanced = {16, 30, 99, Advanced_Mode};
 // 游戲字體、圖片、文字顏色
 private static final Font FontC = new Font("Consolas", Font.PLAIN, 22);
 private static final Font FontD = new Font("等線", Font.PLAIN, 20);
 private static final ImageIcon imgicon = new ImageIcon(
  MineSweeperFrame.class.getResource("/Images/icon.jpg"));
 private static final ImageIcon imgflag = new ImageIcon(
  MineSweeperFrame.class.getResource("/Images/flag.png"));
 private static final ImageIcon imgbomb = new ImageIcon(
  MineSweeperFrame.class.getResource("/Images/bomb.png"));
 private static final Color[] NumberColor = {Color.blue, 
  Color.green, Color.orange, Color.magenta, 
  Color.red, Color.cyan, Color.black, Color.gray};
 // 數(shù)據(jù)文件及高分記錄
 private static File file = new File("MineSweeper.txt");
 private static int HighScore_Elementary;
 private static int HighScore_Intermediate;
 private static int HighScore_Advanced;
 
 private int gamemode;
 private int row;
 private int column;
 private int area;
 private int minecount;
 private int flagcount;
 private int enablecount;
 private boolean[][] minearea;
 private boolean[][] flagmark;
 private boolean isGameOver;
 private boolean isFirstClick;
 private TimeThread timeThread;
 
 private JPanel contentPane;
 private JMenuBar menuBar;
 private JPanel pnlCount;
 private JPanel pnlMine;
 private MineButton[][] btnMine;
 private JTextField txtTime;
 private JTextField txtCount;
 
 /**
 * Launch the application.
 */
 public static void main(String[] args) {
 int[] i = getDataFromFile();
 EventQueue.invokeLater(new Runnable() {
  public void run() {
  try {
   new MineSweeperFrame(i[0], i[1], i[2], i[3]);
  } catch (Exception e) {
   e.printStackTrace();
  }
  }
 });
 }

 /**
 * Create the frame.
 */
 public MineSweeperFrame(int row, int column, int minecount, int mode) {
 // 設置各組件的默認字體
 UIManager.put("Menu.font", FontD);
 UIManager.put("Label.font", FontD);
 UIManager.put("Button.font", FontD);
 UIManager.put("MenuBar.font", FontD);
 UIManager.put("MenuItem.font", FontD);
 UIManager.put("TextField.font", FontD);
 UIManager.put("OptionPane.buttonFont", FontD);
 UIManager.put("OptionPane.messageFont", FontD);
 
 setTitle("掃雷");
 setResizable(false);  // 設置窗口不可改變大小
 setVisible(true);   // 設置窗口初始可見
 setIconImage(imgicon.getImage()); // 設置窗體的icon
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 // 注冊監(jiān)聽器,響應窗口關閉事件
 addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e){
  saveDataToFile();
  }
 });
 
 menuBar = new JMenuBar();
 setJMenuBar(menuBar);
 
 JMenu mGame = new JMenu("游戲");
 menuBar.add(mGame);
 
 JMenu mRestart = new JMenu("重新開始");
 mGame.add(mRestart);
 
 JMenuItem mitRestart = new JMenuItem("重新開始本局");
 mitRestart.addActionListener(new RestartListener());
 mRestart.add(mitRestart);
 
 JMenuItem mitReset = new JMenuItem("開始新的游戲");
 mitReset.addActionListener(new ResetMineListener());
 mRestart.add(mitReset);
 
 JMenu mDifficulty = new JMenu("難度設置");
 mGame.add(mDifficulty);
 
 JMenuItem mitElementary = new JMenuItem("初級");
 mitElementary.addActionListener(new ResetModeListener(Elementary));
 mDifficulty.add(mitElementary);
 
 JMenuItem mitIntermediate = new JMenuItem("中級");
 mitIntermediate.addActionListener(new ResetModeListener(Intermediate));
 mDifficulty.add(mitIntermediate);
 
 JMenuItem mitAdvanced = new JMenuItem("高級");
 mitAdvanced.addActionListener(new ResetModeListener(Advanced));
 mDifficulty.add(mitAdvanced);
 
 JMenuItem mitCustom = new JMenuItem("自定義");
 mitCustom.addActionListener(new CustomSizeFrameListener());
 mDifficulty.add(mitCustom);
 
 JMenuItem mitHighScore = new JMenuItem("高分榜");
 mitHighScore.addActionListener(new HighScoreListener());
 mGame.add(mitHighScore);
 
 mGame.addSeparator();
 JMenuItem mitExit = new JMenuItem("退出");
 // 注冊監(jiān)聽器,監(jiān)聽“退出”菜單項
 mitExit.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  saveDataToFile();
  System.exit(0);
  }
 });
 mGame.add(mitExit);
 
 JMenu mHelp = new JMenu("幫助");
 mHelp.add(new JMenuItem("http://www.baidu.com/"));
 menuBar.add(mHelp);
 
 contentPane = new JPanel();
 contentPane.setBorder(new EmptyBorder(10, 10, 10, 10));
 contentPane.setLayout(new BorderLayout(0, 0));
 setContentPane(contentPane);
 
 pnlCount = new JPanel();
 contentPane.add(pnlCount, BorderLayout.NORTH);
 
 JLabel lblTime = new JLabel("時間");
 pnlCount.add(lblTime);
 
 txtTime = new JTextField("0", 3);
 txtTime.setEditable(false);
 pnlCount.add(txtTime);
 
 JLabel lblCount = new JLabel("計數(shù)");
 pnlCount.add(lblCount);
 
 txtCount = new JTextField("0/" + minecount, 5);
 txtCount.setEditable(false);
 pnlCount.add(txtCount);
 
 pnlMine = new JPanel();
 contentPane.add(pnlMine, BorderLayout.CENTER);
 
 gamemode = mode;
 setMineArea(row, column, minecount);
 setMinePosition();
 setMineButton();
 UIManager.put("Label.font", FontC);
 }
 
 // 從文件中讀取數(shù)據(jù)
 public static int[] getDataFromFile() {
 try {
  FileInputStream fis = new FileInputStream(file);
  byte[] buffer = new byte[256];
  int size = fis.read(buffer);
  fis.close();
  String[] s = new String(buffer, 0, size).split(" ");
  HighScore_Elementary = Integer.parseInt(s[0]);
  HighScore_Intermediate = Integer.parseInt(s[1]);
  HighScore_Advanced = Integer.parseInt(s[2]);
  int[] i = {Integer.parseInt(s[3]), Integer.parseInt(s[4]),
   Integer.parseInt(s[5]), Integer.parseInt(s[6])};
  return i;
 } catch (Exception e) {
  HighScore_Elementary = Integer.MAX_VALUE;
  HighScore_Intermediate = Integer.MAX_VALUE;
  HighScore_Advanced = Integer.MAX_VALUE;
  return Elementary;
 }
 }
 
 // 保存數(shù)據(jù)到文件
 public void saveDataToFile() {
 try {
  String s = HighScore_Elementary + " " + HighScore_Intermediate + " "
   + HighScore_Advanced + " " + row + " " + column + " "
   + minecount + " " + gamemode;
  FileOutputStream fos = new FileOutputStream(file);
  fos.write(s.getBytes());
  fos.close();
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
 
 // 初始化面板的各項參數(shù)
 private void setMineArea(int row, int column, int minecount) {
 setSize(30 * column + 20, 30 * row + 120);
 // 設置窗口在屏幕的正中心
 setLocationRelativeTo(null);
 this.row = row;
 this.column = column;
 this.minecount = minecount;
 area = row * column;
 flagcount = 0;
 enablecount = area;
 minearea = new boolean[row][column];
 flagmark = new boolean[row][column];
 isGameOver = false;
 isFirstClick = true;
 }
 
 // 隨機生成地雷的位置
 private void setMinePosition(){
 // 生成minecount個不重復的隨機數(shù)
 int[] pos = new int[area];
 for (int i = 0; i < area; i++) {
  pos[i] = i;
 }
 Random rand = new Random();
 for (int i = 0; i < minecount; i++) {
  int n = rand.nextInt(area - i);
  minearea[pos[n] / column][pos[n] % column] = true;
  pos[n] = pos[area - i - 1];
 }
 }
 
 // 向地雷面板上添加按鈕
 private void setMineButton() {
 pnlMine.setLayout(new GridLayout(row, column));
 btnMine = new MineButton[row][column];
 for (int i = 0; i < row; i++) {
  for (int j = 0; j < column; j++) {
  btnMine[i][j] = new MineButton(i, j);
  pnlMine.add(btnMine[i][j]);
  }
 }
 }
 
 // “重新開始本局”菜單項監(jiān)聽類
 private class RestartListener implements ActionListener {
 public void actionPerformed(ActionEvent e) {
  new MenuFunction().Restart();
 }
 }
 
 // “開始新的的游戲”菜單項監(jiān)聽類
 private class ResetMineListener implements ActionListener {
 public void actionPerformed(ActionEvent e) {
  new MenuFunction().ResetMine();
 }
 }
 
 // “游戲模式設置”菜單項監(jiān)聽類
 private class ResetModeListener implements ActionListener {
 private int[] mode;
 public ResetModeListener(int[] mode) {
  this.mode = mode;
 }
 
 public void actionPerformed(ActionEvent e) {
  if (gamemode == mode[3]) {
  new MenuFunction().ResetMine();
  } else {
  new MenuFunction().ResetSize(mode[0], mode[1], mode[2]);
  gamemode = mode[3];
  }
 }
 }
 
 // “自定義”菜單項監(jiān)聽類,JFrame窗口的子類
 private class CustomSizeFrameListener extends JFrame implements ActionListener {
 public CustomSizeFrameListener() {
  setTitle("自定義");
  setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  setSize(320, 220);
  setLocationRelativeTo(null); // 設置窗口在屏幕的正中心
  setResizable(false);  // 設置窗體不可改變大小
  JPanel contentPane = new JPanel();
  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  contentPane.setLayout(new GridLayout(4, 0));
  setContentPane(contentPane);
  
  JPanel pnlRow = new JPanel();
  contentPane.add(pnlRow);
  pnlRow.add(new JLabel("行數(shù):"));
  JTextField txtRow = new JTextField(10);
  pnlRow.add(txtRow);
  
  JPanel pnlColumn = new JPanel();
  contentPane.add(pnlColumn);
  pnlColumn.add(new JLabel("列數(shù):"));
  JTextField txtColumn = new JTextField(10);
  pnlColumn.add(txtColumn);
  
  JPanel pnlMineCount = new JPanel();
  contentPane.add(pnlMineCount);
  pnlMineCount.add(new JLabel("雷數(shù):"));
  JTextField txtMineCount = new JTextField(10);
  pnlMineCount.add(txtMineCount);
  
  JPanel pnlButton = new JPanel();
  contentPane.add(pnlButton);
  JButton btnOK = new JButton("確定");
  btnOK.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
   try {
   int r = Integer.parseInt(txtRow.getText().trim());
   int c = Integer.parseInt(txtColumn.getText().trim());
   int count = Integer.parseInt(txtMineCount.getText().trim());
   if (r <= 0 || c <= 0 || r > 24 || c > 30) {
    JOptionPane.showMessageDialog(null, "限制行數(shù):1~24\n限制列數(shù):1~30",
     "警告", JOptionPane.WARNING_MESSAGE);
    return;
   }
   if (count <= 0 || count > r * c) {
    JOptionPane.showMessageDialog(null, "限制雷數(shù):1~" + (r * c),
     "警告", JOptionPane.WARNING_MESSAGE);
    return;
   }
   new MenuFunction().ResetSize(r, c, count);
   gamemode = Custom_Mode;
   setVisible(false);
   } catch (NumberFormatException ex) {
   JOptionPane.showMessageDialog(null, "無效輸入!",
    "錯誤", JOptionPane.ERROR_MESSAGE);
   }
  }
  });
  pnlButton.add(btnOK);
 }
 
 public void actionPerformed(ActionEvent e) {
  setVisible(true);
 }
 }
 
 // “高分榜”菜單項監(jiān)聽類
 private class HighScoreListener implements ActionListener {
 public void actionPerformed(ActionEvent e) {
  JOptionPane.showMessageDialog(null, "初級:" + HighScore_Elementary
   + "秒\n中級:" + HighScore_Intermediate
   + "秒\n高級:" + HighScore_Advanced + "秒",
   "高分榜", JOptionPane.INFORMATION_MESSAGE);
 }
 }
 
 // 菜單欄事件監(jiān)聽函數(shù)類
 private class MenuFunction {
 // “重新開始本局”函數(shù)
 public void Restart() {
  flagcount = 0;
  enablecount = area;
  if (!isFirstClick) {
  timeThread.interrupt();
  isFirstClick = true;
  txtTime.setText("0");
  }
  txtCount.setText("0/" + minecount);
  for (int i = 0; i < row; i++) {
  for (int j = 0; j < column; j++) {
   flagmark[i][j] = false;
   btnMine[i][j].removeLabel();
   btnMine[i][j].setIcon(null);
   btnMine[i][j].setOriginalStyle();
   btnMine[i][j].setEnabled(true);
  }
  }
  if (isGameOver) {
  for (int i = 0; i < row; i++) {
   for (int j = 0; j < column; j++) {
   btnMine[i][j].setMineListener();
   }
  }
  isGameOver = false;
  }
 }
 
 // “開始新的游戲”函數(shù)
 public void ResetMine() {
  minearea = new boolean[row][column];
  setMinePosition();
  Restart();
 }
 
 // “游戲模式設置”函數(shù)
 public void ResetSize(int r, int c, int count) {
  Restart();
  txtCount.setText("0/" + count);
  pnlMine.removeAll();
  setMineArea(r, c, count);
  setMinePosition();
  setMineButton();
 }
 }
 
 // 地雷區(qū)按鈕監(jiān)聽類
 private class MineListener extends MouseAdapter {
 private int r;
 private int c;
 private boolean bothpress;
 private MouseFunction mousefunction;
 public MineListener(int r, int c) {
  this.r = r;
  this.c = c;
  mousefunction = new MouseFunction(r, c);
 }
 
 // 鼠標點擊時觸發(fā)
 public void mousePressed(MouseEvent e) {
  // 判斷是否為左右雙鍵同時點擊
  int d = e.getModifiersEx();
  if (d == InputEvent.BUTTON1_DOWN_MASK + InputEvent.BUTTON3_DOWN_MASK) {
  bothpress = true;
  } else {
  bothpress = false;
  }
  if (bothpress) {
  mousefunction.bothPressed();
  }
 }
 
 // 鼠標釋放時觸發(fā)
 public void mouseReleased(MouseEvent e) {
  if (bothpress) {
  mousefunction.bothReleased();
  } else if (e.getButton() == MouseEvent.BUTTON1) {
  mousefunction.leftReleased(r, c);
  } else if (e.getButton() == MouseEvent.BUTTON3 && !bothpress) {
  mousefunction.rightReleased();
  }
  if (minecount == enablecount) {
  mousefunction.Success();
  }
 }
 }
 
 // 地雷區(qū)鼠標點擊事件監(jiān)聽函數(shù)類
 private class MouseFunction {
 private int r;
 private int c;
 private boolean[] bool;
 public MouseFunction(int r, int c) {
  this.r = r;
  this.c = c;
  bool = surroundingButtons(r, c);
 }
 
 // 判斷被點擊按鈕周邊3*3范圍內有無其它按鈕
 private boolean[] surroundingButtons(int r, int c) {
  boolean[] bool = {true, true, true, true, true, true, true, true, true};
  if (r == 0) {bool[0] = bool[1] = bool[2] = false;}
  if (r == row - 1) {bool[6] = bool[7] = bool[8] = false;}
  if (c == 0) {bool[0] = bool[3] = bool[6] = false;}
  if (c == column - 1) {bool[2] = bool[5] = bool[8] = false;}
  return bool;
 }
 
 // 左鍵釋放函數(shù)
 public void leftReleased(int r, int c) {
  if (isFirstClick) {
  timeThread = new TimeThread();
  timeThread.start();
  isFirstClick = false;
  }
  if (flagmark[r][c] || !btnMine[r][c].isEnabled()) {return;}
  if (minearea[r][c]) {GameOver(r, c); return;}
  
  boolean[] bool = surroundingButtons(r, c);
  int i = 0;
  if (bool[0] && minearea[r - 1][c - 1]) {i++;}
  if (bool[1] && minearea[r - 1][c]) {i++;}
  if (bool[2] && minearea[r - 1][c + 1]) {i++;}
  if (bool[3] && minearea[r][c - 1]) {i++;}
  if (bool[5] && minearea[r][c + 1]) {i++;}
  if (bool[6] && minearea[r + 1][c - 1]) {i++;}
  if (bool[7] && minearea[r + 1][c]) {i++;}
  if (bool[8] && minearea[r + 1][c + 1]) {i++;}
  
  btnMine[r][c].setDisabledStyle();
  btnMine[r][c].setEnabled(false);
  enablecount--;
  if (i != 0) {
  btnMine[r][c].setLabel(i);
  } else {
  if (bool[0]) {leftReleased(r - 1, c - 1);}
  if (bool[1]) {leftReleased(r - 1, c);}
  if (bool[2]) {leftReleased(r - 1, c + 1);}
  if (bool[3]) {leftReleased(r, c - 1);}
  if (bool[5]) {leftReleased(r, c + 1);}
  if (bool[6]) {leftReleased(r + 1, c - 1);}
  if (bool[7]) {leftReleased(r + 1, c);}
  if (bool[8]) {leftReleased(r + 1, c + 1);}
  }
 }
 
 // 右鍵釋放函數(shù)
 public void rightReleased() {
  if (flagmark[r][c]) {
  btnMine[r][c].setIcon(null);
  flagmark[r][c] = false;
  flagcount--;
  txtCount.setText(flagcount + "/" + minecount);
  } else {
  if (btnMine[r][c].isEnabled()) {
   btnMine[r][c].setIcon(imgflag);
   flagmark[r][c] = true;
   flagcount++;
   txtCount.setText(flagcount + "/" + minecount);
  }
  }
 }
 
 // 雙鍵點擊函數(shù)
 public void bothPressed() {
  if (flagmark[r][c]) {return;}
  int k = 0;
  for (int i = -1; i <= 1; i++) {
  for (int j = -1; j <= 1; j++) {
   if (bool[k++] && btnMine[r + i][c + j].isEnabled() && !flagmark[r + i][c + j]) {
   btnMine[r + i][c + j].setClickedStyle();
   }
  }
  }
 }
 
 // 雙鍵釋放函數(shù)
 public void bothReleased() {
  if (flagmark[r][c]) {return;}
  int k = 0, m = 0, n = 0;
  for (int i = -1; i <= 1; i++) {
  for (int j = -1; j <= 1; j++) {
   if (bool[k++]) {
   if (btnMine[r + i][c + j].isEnabled() && !flagmark[r + i][c + j]) {
    btnMine[r + i][c + j].setOriginalStyle();
   }
   if (minearea[r + i][c + j]) {
    m++;
   }
   if (flagmark[r + i][c + j]) {
    n++;
   }
   }
  }
  }
  if (btnMine[r][c].isEnabled()) {return;}
  if (m == n) {
  if (bool[0] && !flagmark[r - 1][c - 1]) {leftReleased(r - 1, c - 1);}
  if (bool[1] && !flagmark[r - 1][c]) {leftReleased(r - 1, c);}
  if (bool[2] && !flagmark[r - 1][c + 1]) {leftReleased(r - 1, c + 1);}
  if (bool[3] && !flagmark[r][c - 1]) {leftReleased(r, c - 1);}
  if (bool[5] && !flagmark[r][c + 1]) {leftReleased(r, c + 1);}
  if (bool[6] && !flagmark[r + 1][c - 1]) {leftReleased(r + 1, c - 1);}
  if (bool[7] && !flagmark[r + 1][c]) {leftReleased(r + 1, c);}
  if (bool[8] && !flagmark[r + 1][c + 1]) {leftReleased(r + 1, c + 1);}
  }
 }
 
 // 游戲結束函數(shù)
 public void GameOver(int r, int c) {
  btnMine[r][c].setBackground(Color.red);
  for (int i = 0; i < row; i++) {
  for (int j = 0; j < column; j++) {
   if (minearea[i][j]) {
   btnMine[i][j].setIcon(imgbomb);
   }
   btnMine[i][j].removeMineListener();
  }
  }
  timeThread.interrupt();
  JOptionPane.showMessageDialog(null, "Game Over",
   "提示", JOptionPane.INFORMATION_MESSAGE);
  isGameOver = true;
 }
 
 // 游戲勝利函數(shù)
 public void Success() {
  txtCount.setText(minecount + "/" + minecount);
  for (int i = 0; i < row; i++) {
  for (int j = 0; j < column; j++) {
   if (minearea[i][j]) {
   btnMine[i][j].setIcon(imgflag);
   }
   btnMine[i][j].removeMineListener();
  }
  }
  if (timeThread != null) {
  timeThread.interrupt();
  }
  String s = "You Win!";
  int time = Integer.parseInt(txtTime.getText());
  switch (gamemode) {
  case Elementary_Mode:
  if (time < HighScore_Elementary) {
   HighScore_Elementary = time;
   s = "New Record!";
  }
  break;
  case Intermediate_Mode:
  if (time < HighScore_Intermediate) {
   HighScore_Intermediate = time;
   s = "New Record!";
  }
  break;
  case Advanced_Mode:
  if (time < HighScore_Advanced) {
   HighScore_Advanced = time;
   s = "New Record!";
  }
  }
  JOptionPane.showMessageDialog(null, s + "\n用時:" + time + "秒",
   "提示", JOptionPane.INFORMATION_MESSAGE);
  isGameOver = true;
 }
 }
 
 // 地雷區(qū)按鈕類,JButton按鈕的子類
 private class MineButton extends JButton {
 private MineListener mineListener;
 private JLabel lbl;
 private MineButton() {
  super(null, null);
  setBackground(Color.lightGray);
  // 設置凸起來的按鈕
  setBorder(BorderFactory.createRaisedBevelBorder());
 }
 
 public MineButton(int r, int c) {
  this();
  mineListener = new MineListener(r, c);
  addMouseListener(mineListener);
 }
 
 public void setMineListener() {
  addMouseListener(mineListener);
 }
 
 public void removeMineListener() {
  removeMouseListener(mineListener);
 }
 
 public void setOriginalStyle() {
  setBackground(Color.lightGray);
  // 設置凸起來的按鈕
  setBorder(BorderFactory.createRaisedBevelBorder());
 }
 
 public void setDisabledStyle() {
  setBackground(null);
  // 設置按鈕邊框線條
  setBorder(BorderFactory.createLineBorder(Color.lightGray));
 }
 
 public void setClickedStyle() {
  setBackground(Color.lightGray);
  // 設置凹下去的按鈕
  setBorder(BorderFactory.createLoweredBevelBorder());
 }
 
 public void setLabel(int i) {
  lbl = new JLabel(String.valueOf(i));
  lbl.setHorizontalAlignment(JLabel.CENTER);
  lbl.setVerticalAlignment(JLabel.CENTER);
  lbl.setForeground(NumberColor[i - 1]);
  setLayout(new BorderLayout(0, 0));
  add(lbl, BorderLayout.CENTER);
 }
 
 public void removeLabel() {
  if (lbl != null) {
  remove(lbl);
  lbl = null;
  }
 }
 }
 
 // 線程類,游戲開始后每隔一秒刷新txtTime文本框里顯示的時間
 private class TimeThread extends Thread {
 // 重寫run()方法
 public void run() {
  // 獲取當前系統(tǒng)時間
  long startTime = System.currentTimeMillis();
  // 非阻塞過程中通過判斷中斷標志來退出
  while (!isInterrupted()) {
  // 獲取當前的系統(tǒng)時間,與初始時間相減就是程序運行的毫秒數(shù),除以1000就是秒數(shù)
  long endTime = System.currentTimeMillis();
  long usedTime = (endTime - startTime) / 1000;
  txtTime.setText(String.valueOf(usedTime));
  try {
   // 線程掛起一秒鐘
   Thread.sleep(1000);
   // 阻塞過程捕獲中斷異常來退出
  } catch (InterruptedException e) {
   e.printStackTrace();
   // 捕獲到異常之后,執(zhí)行break跳出循環(huán)
   break;
  }
  }
 }
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Spring Boot配置線程池拒絕策略的場景分析(妥善處理好溢出的任務)

    Spring Boot配置線程池拒絕策略的場景分析(妥善處理好溢出的任務)

    本文通過實例代碼給大家介紹下如何為線程池配置拒絕策略、如何自定義拒絕策略。對Spring Boot配置線程池拒絕策略的相關知識感興趣的朋友一起看看吧
    2021-09-09
  • JAVA面向對象之繼承?super入門解析

    JAVA面向對象之繼承?super入門解析

    在JAVA類中使用super來引用父類的成分,用this來引用當前對象,如果一個類從另外一個類繼承,我們new這個子類的實例對象的時候,這個子類對象里面會有一個父類對象。怎么引用里面的父類對象呢?用super來引用,this指當前對象的引用,super是當前對象里面的父對象的引用
    2022-01-01
  • Java webSerivce的使用看完你就明白了

    Java webSerivce的使用看完你就明白了

    因為前段時間,需要使用到webService來調用公司的其他系統(tǒng)api接口,但是請求方式和我熟知的http請求不一樣,是基于soap協(xié)議來傳輸xml數(shù)據(jù)格式,請求的參數(shù)極其復雜,需要封裝多層xml數(shù)據(jù)格式,并且我不知道對方的api接口是什么語言,甚至不知道他們存在于什么平臺
    2022-03-03
  • java easyUI實現(xiàn)自定義網(wǎng)格視圖實例代碼

    java easyUI實現(xiàn)自定義網(wǎng)格視圖實例代碼

    這篇文章主要給大家介紹了關于java easyUI實現(xiàn)自定義網(wǎng)格視圖的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • springboot 啟動如何排除某些bean的注入

    springboot 啟動如何排除某些bean的注入

    這篇文章主要介紹了springboot 啟動如何排除某些bean的注入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • spring cloud eureka微服務之間的調用詳解

    spring cloud eureka微服務之間的調用詳解

    這篇文章主要介紹了spring cloud eureka微服務之間的調用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Springboot通過ObjectMapper配置json序列化詳解

    Springboot通過ObjectMapper配置json序列化詳解

    SpringBoot默認集成Jackson庫,其中ObjectMapper類是核心,用于Java對象與JSON字符串的互轉,提供配置序列化特性、注冊模塊等方法,在SpringBoot中可以全局配置JSON格式,如日期格式化、將Long轉為字符串,還可以配置序列化時的各種規(guī)則,感興趣的可以了解一下
    2024-10-10
  • Java如何導出多個excel并打包壓縮成.zip文件

    Java如何導出多個excel并打包壓縮成.zip文件

    本文介紹了Java如何導出多個excel文件并將這些文件打包壓縮成zip格式,首先,需要從數(shù)據(jù)庫中獲取數(shù)據(jù)并導出到指定位置形成excel文件,接著,將這些數(shù)據(jù)分散到不同的excel文件中,最后,使用相關的Java工具類對這些excel文件進行打包壓縮
    2024-09-09
  • 通過簡單步驟實現(xiàn)SpringMVC文件上傳

    通過簡單步驟實現(xiàn)SpringMVC文件上傳

    這篇文章主要介紹了通過簡單步驟實現(xiàn)SpringMVC文件上傳,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • SpringSecurity?用戶帳號已被鎖定的問題及解決方法

    SpringSecurity?用戶帳號已被鎖定的問題及解決方法

    這篇文章主要介紹了SpringSecurity?用戶帳號已被鎖定,本文給大家分享問題原因及解決方式,需要的朋友可以參考下
    2023-12-12

最新評論

兰坪| 醴陵市| 绥江县| 兴安县| 平湖市| 郑州市| 凭祥市| 乳山市| 永泰县| 广元市| 阜城县| 定西市| 阳曲县| 青岛市| 鄂伦春自治旗| 怀集县| 贵溪市| 华容县| 泰顺县| 海原县| 进贤县| 张家口市| 涡阳县| 拉萨市| 赤峰市| 上犹县| 绿春县| 宜黄县| 奈曼旗| 称多县| 天镇县| 北宁市| 淮滨县| 青川县| 烟台市| 葫芦岛市| 吴桥县| 繁峙县| 芜湖县| 叙永县| 南岸区|