Java項目實戰之天天酷跑(一):登錄界面

首先,寫一個需求文檔:
一、項目名稱:《天天酷跑》(RunDay)

二、功能介紹:
闖關類遊戲,玩家登錄後,選擇進入遊戲,通過鍵盤控制玩家的上下左右移動,來躲避
障礙物和喫金幣,玩家躲避的障礙物越多跑酷距離越遠,玩家喫的金幣越多,得分越高。

三、功能模塊:
1、登錄界面
用戶名(輸入框,明文) 密碼(輸入框,密文) 登錄、取消按鈕
2、菜單選擇界面
開始遊戲按鈕(圖片按鈕) 幫助按鈕 退出按鈕
3、緩衝加載界面
自動加載進度條,加載完畢之後,跳轉到下一界面
4、遊戲主界面
移動的背景圖片、動態的玩家、五種障礙物持續出現、玩家和障礙物的碰撞、
暫停、繼續功能、玩家的移動功能
5、結束界面
獲取玩家的得分、跑酷距離。繼續遊戲、返回主菜單的功能。

四、開發者:Huey
五、版本號:1.0
六、開發時間:2020.11.16

開發模式:MVC模式

M:Model(數據層),存儲的是實體類。
V:View(顯示層),存儲的是關於界面的類。
C:Controller(控制層),存儲的是相關的邏輯層代碼。

企業級項目命名規範:

cn.sqc.runday.view

界面功能需求圖如下:

接下來我們再做一些準備工作:導入相關圖片素材。

將天天酷跑的圖片(Image)資源解壓到桌面後,(Image文件如下圖所示:)

複製到Eclipse中,單擊src,直接Ctrl+V。

本文將實現cn.sqc.runday.view這一界面內容。

相關代碼如下:

package cn.sqc.runday.view;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**
 * 
 * @author Huey
 * @date 2020-11-16
 * 登錄界面:用戶名輸入框  密碼輸入框  登錄取消按鈕 功能
 *
 */
public class LoginFrame extends JFrame{
    //用戶名變量(文本)
    JLabel userLabel;
    //用戶名輸入框(文本輸入框)
    JTextField userField;
    //密碼變量(文本)
    JLabel userLabel2;
    //密碼輸入框(文本輸入框)
    JPasswordField userField2;
    //登錄按鈕、取消按鈕(按鈕)
    JButton Login,Cancel;

    public LoginFrame() {//直接 alt / (無參構造)  
        userLabel = new JLabel("用戶名");  
        //設置字體
        userLabel.setFont(new Font("微軟雅黑",Font.BOLD,18));               
        userLabel2 = new JLabel("密  碼");
        userLabel2.setFont(new Font("微軟雅黑",Font.BOLD,18));
            
        //佈局方式:絕對佈局
        userLabel.setBounds(20, 220, 100, 30);//x位置,y位置,所佔顯示空間的大小
        this.add(userLabel);//將用戶名這三個字添加到登錄界面上,以下同理
        userLabel2.setBounds(20, 280, 100, 30);
        this.add(userLabel2);

        //用戶名輸入框
        userField = new JTextField();
        userField.setBounds(80, 220, 100, 30);
        //設置輸入框凹陷效果
        userField.setBorder(BorderFactory.createLoweredBevelBorder());
        //設置輸入框背景透明
        userField.setOpaque(false);
        this.add(userField);
        
        userField2 = new JPasswordField();
        userField2.setBounds(80, 280, 100, 30);
        userField2.setBorder(BorderFactory.createLoweredBevelBorder());
        userField2.setOpaque(false);
        this.add(userField2);
        
        
        
//登錄按鈕
        Login = new JButton("登錄");
        Login.setBounds(45,350,60,36);
        //Login.setBackground(new Color(44,22,44));//背景色
        //Login.setForeground(Color.BLUE);//前景色     
        //綁定登錄按鈕的事件監聽
        Login.addActionListener(new ActionListener() {//ActionListener alt /
            
            @Override
            public void actionPerformed(ActionEvent e) {
                //System.out.println("點擊登錄按鈕");
                //獲取用戶名輸入框的內容
                String userName = userField.getText();
                String passWord = userField2.getText();//橫槓原因:方法太老了,不推薦用
                if("Huey".equals(userName) && "123".equals(passWord)){
                    //登錄成功
                    JOptionPane.showMessageDialog(null, "歡迎"+userName+"來到天天酷跑遊戲");
                    //跳轉到下一界面
                    
                    //關閉當前界面
                    dispose();
                }else if("".equals(userName) || "".equals(passWord)){
                    //不能爲空
                    JOptionPane.showMessageDialog(null, "用戶名 / 密碼不能爲空,請重新輸入!");
                }else{
                    JOptionPane.showMessageDialog(null, "用戶名 / 密碼輸入錯誤,請重新輸入!");
                }
                
            }
        });
        this.add(Login);
        
//取消按鈕
        Cancel = new JButton("取消");
        Cancel.setBounds(135,350,60,36);
        this.add(Cancel);
        Cancel.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                dispose();
            }
        });
        

        
        //創建背景面板,並添加到窗體上去
        LoginPanel panel = new LoginPanel();
        this.add(panel);    
        
        //設置登錄界面的基本屬性
        this.setSize(900,530);
        this.setLocationRelativeTo(null);//位置居中
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setUndecorated(true);
        
        //設置窗體的Logo圖標
        this.setIconImage(new ImageIcon("Image/115.png").getImage());//存儲圖片
        this.setVisible(true);
    }
    
    
    
    //測試用的main方法       main + Alt /
    public static void main(String[] args) {
        new LoginFrame();
    }
    class LoginPanel extends JPanel{//畫板
        //背景圖片變量
        Image background;//------ctr shift + o 導包
        public LoginPanel() {//-----alt / 回車 構造方法       在{後雙擊,顯示作用域
            //讀取圖片文件,賦值給background變量
            try {//-----雖然不大可能,但也做好喫飯噎死的準備
                background = ImageIO.read(new File("Image/login.jpg"));//----read參數爲File類型
            } catch (IOException e) {//-------捕獲異常信息
                // 打印異常日誌信息
                e.printStackTrace();
            }
        }
        //繪製方法
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            //繪製背景圖片
            g.drawImage(background, 0, 0,900,530, null);//900,530爲寬高
        }
    }
    
}
//throws ......拋異常,將下面的異常向上拋,交給上級:不建議   

爲了更清楚地看出代碼結構,這裏給出部分代碼的作用域。
LoginFrame作用域一直到最後一個}

LoginPanel的代碼塊:

運行結果截圖:

1.界面

2.登錄

2.1、用戶名及密碼輸入爲空的情況:

2.2、用戶名或密碼輸入錯誤的情況:

2.3、用戶名及密碼輸入正確的情況:

單擊彈窗中的“確定”,直接退出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章