📄 lotterywindow.java
字号:
//LotteryWindow.javapackage com.cy;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.math.*;public class LotteryWindow extends JWindow { JPanel jPanel1 = new JPanel(); JLabel lbLottery = new JLabel(); JToggleButton tgbtDraw = new JToggleButton(); JButton btExit = new JButton(); JButton btExit1 = new JButton(); JButton btExit2 = new JButton(); JToggleButton tgbtDraw1 = new JToggleButton(); JPanel jPanel2 = new JPanel(); JPanel jPanel3 = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); BorderLayout borderLayout2 = new BorderLayout(); JPanel jPanel4 = new JPanel(); JLabel lbRound = new JLabel(); JLabel lbUser = new JLabel(); JLabel jLabel1 = new JLabel(); int currentAward=0; int currentAwardUser=0; boolean isLotteryProcessEnd = false; boolean isReturnNow = false; DrawLots lotsObj; Raffle raffleObj; MainFrame mainFrame; public LotteryWindow(DrawLots lots) { try { lotsObj = lots; jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { lbLottery.setFont(new java.awt.Font("Dialog", 0, 200)); lbLottery.setForeground(new Color(255, 79, 0)); lbLottery.setHorizontalAlignment(SwingConstants.CENTER); lbLottery.setText("Ready"); jPanel1.setLayout(borderLayout1); tgbtDraw.setText("Start"); tgbtDraw.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { tgbtDraw_actionPerformed(e); } }); btExit.setText("Exit"); btExit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { btExit_actionPerformed(e); } }); jPanel2.setLayout(borderLayout2); jPanel3.setPreferredSize(new Dimension(125, 55)); lbUser.setText("User "+ currentAwardUser); lbUser.setFont(new java.awt.Font("Dialog", 0, 30)); lbUser.setToolTipText(""); lbRound.setFont(new java.awt.Font("Dialog", 0, 30)); lbRound.setText("Award "+(AppState.roundCount.length-currentAward)); jLabel1.setText(" "); jPanel4.add(lbRound, null); jPanel4.add(lbUser, null); this.getContentPane().add(jPanel1, BorderLayout.CENTER); jPanel1.add(jPanel2, BorderLayout.CENTER); jPanel2.add(lbLottery, BorderLayout.CENTER); jPanel1.add(jPanel3, BorderLayout.SOUTH); jPanel3.add(tgbtDraw, null); jPanel3.add(btExit, null); jPanel1.add(jPanel4, BorderLayout.NORTH); jPanel4.add(jLabel1, null); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); setSize(screenSize); raffleObj = new Raffle(); raffleObj.lotteryObj = lotsObj; raffleObj.setLabel(lbLottery); } /** * 抽奖按钮被按下后,需要按照状态启停抽奖过程 */ void tgbtDraw_actionPerformed(ActionEvent e) { if (tgbtDraw.isSelected()){ startRaffle(); lbUser.setText("User: "+(lotsObj.getCurrentRoundUser()+1)); lbRound.setText("Award "+(AppState.roundCount.length-lotsObj.currentRound)); tgbtDraw.setText("Stop"); }else{ tgbtDraw.setText("Start"); // how to let stepToNextDraw() stopRaffle(); raffleObj.lotteryObj.draw(raffleObj.random); if (lotsObj.stepToNextDraw()==false){ tgbtDraw.setEnabled(false); raffleEnd(); } } } /** * 退出按钮被选择时候,询问是否本次抽奖结果有效 */ void btExit_actionPerformed(ActionEvent e) { if (tgbtDraw.isSelected()==true){ return; } if (this.isLotteryProcessEnd==false){ int result = JOptionPane.showConfirmDialog( this, "Suffle is not end, are you really want to exit ?", "Confirm to exit", JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.CANCEL_OPTION) { return; } }else{ int result = JOptionPane.showConfirmDialog( this, "Suffle is ended, save the result ?", "Warning", JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.OK_OPTION) { saveSuffleResult(); } } dispose(); } /** * 所有的奖项都已经决出 */ public void raffleEnd(){ isLotteryProcessEnd = true; JOptionPane.showMessageDialog(this,"All awards are drawed"); } /** * 将抽奖结果放入AppState类中的幸运用户集合中 */ void saveSuffleResult(){ int[][] userArray = lotsObj.getLuckyUserArray(); for (int i = 0; i<userArray.length;i ++){ for (int j = 0; j<userArray[i].length;j++){ UserInfo userInfo = (UserInfo)AppState.userList.elementAt(userArray[i][j]); LuckyUserInfo luckyUserInfo = new LuckyUserInfo(userInfo,userArray.length-i); AppState.luckyUserList.add(luckyUserInfo); } } AppState.mainFrame.resetLuckyUserTable(); } /** * 开始摇奖,通过启动线程来进行后台编号的滚动 */ public void startRaffle(){ raffleObj.isRunning=true; raffleObj.start(); } /** * 停止摇奖,暂停摇奖过程 */ public void stopRaffle(){ raffleObj.pause(); while(raffleObj.isRunning); } /** * 抽奖线程类 */ class Raffle implements Runnable{ DrawLots lotteryObj; JLabel label; int random = 0; boolean isRunning = true; void setLabel(JLabel lb){ label = lb; } void setLotteryObj(DrawLots obj){ lotteryObj = obj; } void pause(){ isRunning = false; } /** * 为用户界面显示不断滚动的数字。 */ public void run(){ int sn = 0; String name; while (isRunning){ random = lotteryObj.getRandomNumber(); sn = lotteryObj.getUserSN(random); name =lotteryObj.getUserName(random); label.setText(sn+""); try { Thread.sleep(50); } catch (Exception ex) { ex.printStackTrace(); } }// think it over , why not can put the draw() method here , it will couse some thread problem// lotteryObj.draw(random); } public void start(){ Thread thread=new Thread(this); thread.start(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -