JAVA課程設計——憤怒的小鳥(個人)


基於Java Swing的GUI設計

團隊博客

界面切換

利用CardLayout卡片布局,將多張“卡片”命名,需要調用時再通過名字切換至相應的“卡片”

while(true) {
			switch(nextView) {
			case "startView":
				cardlayout.show(views, "startView");
				startView.setRunning(true);
				nextView = startView.action();
				break;
			case "modelMenuView":
				cardlayout.show(views, "modelMenuView");
				modelMenuView.setRunning(true);
				nextView = modelMenuView.action();
				break;
			case "chapterMenuView":
				cardlayout.show(views, "chapterMenuView");
				chapterMenuView.setRunning(true);
				nextView = chapterMenuView.action();
				break;
			case "userLoadinView":
				cardlayout.show(views, "userLoadinView");
				userLoadinView.setRunning(true);
				nextView = userLoadinView.action();
				break;
			}
		}

自定義action方法的作用與isRunning

action方法中有while,當isRunning就會一直停止在當前界面,結合鼠標監聽器更改isRunning的值來控制界面變化

/*StartView例*/
public String action() {	
		MouseListener ma = new MouseListener(){
			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getX() > 670 && e.getX() < 850 && e.getY() > 660 && e.getY() < 740)	//按下開始游戲按鈕進入下一個頁面
				{
					gameStartButton.mouseClick();
					nextView = "userLoadinView";
					isRunning =  false;
				}
				if(e.getX() > 60 && e.getX() < 120 && e.getY() > 690 && e.getY() < 770) {	//按下退出按鈕程序結束
					System.exit(0);
				}
			}
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			@Override
			public void mouseExited(MouseEvent e) {
			}
			@Override
			public void mousePressed(MouseEvent e) {
				mouse.mousePress();
			}
			@Override
			public void mouseReleased(MouseEvent e) {
				mouse.mouseLoose();
			}
		};
		MouseMotionListener mb = new MouseMotionListener() {
			@Override
			public void mouseDragged(MouseEvent e) {
				mouse.moveTo(e.getX(),e.getY());
			}
			@Override
			public void mouseMoved(MouseEvent e) {
				mouse.moveTo(e.getX(),e.getY());
				if(e.getX() > 670 && e.getX() < 850 && e.getY() > 660 && e.getY() < 740 ) {
					gameStartButton.mouseMoveIn();
				}
				else {
					gameStartButton.mouseMoveOut();
				}
				if(e.getX() > 60 && e.getX() < 120 && e.getY() > 690 && e.getY() < 770) {
					quitButton.mouseMoveIn();
				}
				else {
					quitButton.mouseMoveOut();
				}
			}
		};
		addMouseListener(ma);
		addMouseMotionListener(mb);
		while(isRunning) {
			repaint();							//重繪JPanel界面
			try {
				Thread.sleep(10);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
		}
		return nextView;
	}

動態按鈕效果

實際上只是當鼠標監聽器監聽到鼠標位於按鈕上時,使用較大的圖片替換掉較小的圖片

美觀的輸入文本框

實際上是PS出來的的素材結合JTextField和JPasswordField做出來的。JTextField和JPasswordField的背景色與素材背景色一致並取消邊框。

this.userNameField = new JTextField();										//用戶名輸入框
this.userNameField.setBounds(820, 450, 300, 50);							//設置位置大小
this.userNameField.setBackground(new Color(255,229,164));					//設置背景顏色
this.userNameField.setFont(new Font("Serif", Font.PLAIN, 24));				//設置字體大小
this.userNameField.setBorder(null);											//設置沒有邊框
this.add(userNameField);													//添加至當前視圖
this.passwordField = new JPasswordField();									//密碼輸入框
this.passwordField.setBounds(820, 570, 300, 80);							//設置位置大小
this.passwordField.setBackground(new Color(255,229,164));					//設置背景顏色
this.passwordField.setFont(new Font("Serif", Font.PLAIN, 24));				//設置字體大小
this.passwordField.setBorder(null);											//設置沒有邊框
this.add(passwordField);													//添加至當前視圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM