熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

利用 Java Swing 實現游戲開發

2013-11-23 18:52:18  來源: Java核心技術 

  Swing初體驗
  
  對於想學習Swing編程的朋友我們特地為大家准備了一些小竅門首先下載並閱讀代碼是極有必要的由於這是一篇關於Swing的教程所以我們只是盡可能講解一些與Swing有關的內容與Swing無關的內容一般不會涉及例如算法部分其次受篇幅限制也不可能在這裡將每部分代碼都寫得完完整整的所以大家也需要對照完整代碼來看最後為了使大家更容易把精力集中在Swing學習上我們也將游戲開發中所需資源放在下載文件中大家下載後便能夠編譯運行看到執行結果(下載游戲源文件)
  
  頂層容器
  
  什麼是頂層容器?當我們使用Java進行圖形編程的時候圖在哪裡繪制呢?我們需要一個能夠提供圖形繪制的容器這個容器就被稱為頂層容器你也可以把它想象成一個窗口頂層容器是進行圖形編程的基礎一切圖形化的東西都必然包括在頂層容器中在Swing中我們有三種可以使用的頂層容器它們分別是:
  
  JFrame:用來設計類似於Windows系統中的窗口形式的應用程序
  
  JDialog:和JFrame類似只不過JDialog是用來設計對話框
  
  JApplet:用來設計可以在嵌入在網頁中的Java小程序
  
  如果需要使用Swing制作一個窗口類程序我們的代碼看起來應該是這樣:
  
  import javaxswing*;
  
  public class KyodaiUI
  extends JFrame {
  ……
  }
  
  控件
  
  控件是構成應用程序界面的基本元素按鈕文本框進度條等這些都是控件控件(這裡我們只討論可視化控件)又可以分為容器控件和非容器控件從字面意義上來理解容器控件就是能包含其他控件的特殊控件例如Java中的JPanel控件就屬於容器型控件我們可以在JPanel中放置按鈕文本框等非容器控件你甚至可以在JPanel中再放置若干個JPanel控件(值得注意的是頂層容器也是容器型控件每一個窗口應用程序中有且只能有一個頂層容器控件換句話說頂層容器不能包括在其他的控件中)
  
  Java中的容器控件有很多除剛才提到的JPanel外還有JTabbedPaneJScrollPane等非容器控件有JButtonJLabelJTextField等如果你需要向某個容器型的控件中添加控件你可以使用 add(Component comp) 方法來實現如:
  
  JPanel panel = new JPanel();
  JButton button = new JButton();
  paneladd(button);
  
  布局
  
  什麼是布局?布局是Java中用來控制控件排列位置的一種界面管理系統使用過其他可視化編程開發語言的人在初次接觸Java界面設計時總會感覺到Java界面設計很別扭:居然沒有提供所見即所得的設置控件坐標的方法!然而事實證明Java本身提供的布局管理系統也一樣能夠出色地完成我們的需要而且在跨平台時表現得更有優勢
  
  常用的布局有:
  
  BorderLayout:將界面分割為上下左右以及中間一塊區域的管理系統在BorderLayout布局中最多你只能放個控件如果超過個控件建議還是選用其他的布局系統吧
  
  GridLayout:GridLayout是將用戶界面切割為棋盤一樣的布局管理系統如果我們要設計一個類似於Windows中自帶的計算器軟件GridLayout無疑是最佳選擇
  
  FlowLayout:FlowLayout與上述兩類布局管理系統不太一樣在FlowLayout中你不必指定每個控件放在哪你只需要把控件加入到FlowLayout中FlowLayout就會根據你添加控件的順序依次放置控件如果空間不夠會自動換行
  
  在對這幾個布局管理系統有了基本認識後我們就一起來進入界面設計吧在仔細觀察了QQ游戲中連連看的設定後我們可以發現整個界面分為三個區頂部是系統菜單區占地面積最大的是用戶游戲區另外還有一個用戶交互區每個區域中都由若干控件組成
  
  這麼多控件我們從哪開始入手呢?由於容器控件中可以放置其他控件因此我們只需要先確定放置的容器控件就可以了 既然已經知道需要使用容器控件的個數接下來讓我們就進入布局管理系統的選擇用GridLayout?似乎有點勉強用FlowLayout?還有更好的選擇嗎?對了我想你一定想到了是BorderLayout吧如下圖所示
  
  動手之前大家一定要注意的是界面的設計要先考慮好尺寸不管是主程序界面的大小還是每個區域的大小如果沒有設計好合適的尺寸將來改動起來會十分痛苦
  
  下面便是相應的源程序:
  
  import javaawt*;
  import javaxswing*;
  
  public class KyodaiUI extends JFrame {
  public KyodaiUI() {
  thissetSize( ); //將窗體的大小設定為*
  thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
  thissetResizable(false); //窗體不能改變大小
  thissetTitle(連連看); //設置標題
  
  JPanel toolBar = new JPanel();
  toolBarsetBackground(Colorwhite);
  toolBarsetPreferredSize(new Dimension( ));
  
  JPanel actionPanel = new JPanel(); //新建JPanel型的控件
  actionPanelsetBackground(Coloryellow); //設置背景色
  actionPanelsetPreferredSize(new Dimension( )); //設置大小
  
  JPanel contentPanel = new JPanel();
  contentPanelsetBackground(Colorblue);
  contentPanelsetPreferredSize(new Dimension( ));
  thisgetContentPane()add(toolBar BorderLayoutNORTH);
  thisgetContentPane()add(actionPanel BorderLayoutEAST);
  thisgetContentPane()add(contentPanel BorderLayoutCENTER);
  }
  
  public static void main(String[] args) throws HeadlessException {
  KyodaiUI kyodaiUI = new KyodaiUI();
  kyodaiUIshow();
  }
  }
  
  讓我們來看看上面這段程序是如何運行的首先extends JFrame表明了這是從JFrame中繼承過來的JFrame是最基本的頂層容器控件實際上在JDK中以字母J打頭的控件都是Swing控件然後設置了容器的屬性其中setDefaultCloseOperation(JFrameEXIT_ON_CLOSE)是用來告訴Java虛擬機當用戶點擊窗體右上角的關閉按鈕時關閉該窗口進程如果不這麼做的話你會發現雖然你可以點將窗口關閉然而程序卻沒有退出在接下來的代碼中我們為頂層容器添加了三個Panel容器要注意的是在AWT中我們可以直接寫為add(toolBar BorderLayoutNORTH) 而在 Swing 中卻一定要寫成getContentPane() add(toolBar BorderLayoutNORTH) 否則程序就會出錯
  
  現在大家可以放在編譯運行看看是不是和我的運行結果一樣(見圖)?
  
  邊框
  
  雖然我們使用了不同前景色來區別不同的區域然而卻沒有層次感加上邊框一定會漂亮許多
  
  在Java中所有以J打頭的Swing控件都可以使用setBorder方法來為自己設置邊框邊框有很多種線型凸起凹下空的你甚至可以自由組合形成個人風格所有的Border都必須使用javaxswingBorderFactory中提供的靜態方法來創建比如:
  
  Border border = BorderFactorycreateBevelBorder(BevelBorderLOWERED
  new Color( )
  new Color( )
  new Color( )
  new Color( ));
  
  現在我們將toolBarsetBackground(Colorwhite)改為toolBarsetBorder(border)立體效果是不是已經出現了?
  
  實戰??寫上自己的大名
  
  現在我們已經有了一個能夠運行的界面了雖然它什麼也做不了但是請你別慌羅馬不是一天建成的
  
  現在讓我們在菜單區提供一個關於菜單用來顯示程序的信息難道你不想讓別人知道你的大名嗎?Swing本身就提供了現成的按鈕控件JButton我們只需要創建一個新的按鈕:JButton about = new JButton(關於);這個按鈕該怎麼放到菜單區而不是別的地方呢?我們可以加入下面的代碼:toolBaradd(about);咦怎麼點按鈕沒有反應?這是因為你還沒有告訴程序點擊按鈕時要做什麼事情呢要為按鈕添加事件響應首先需要使用aboutaddActionListener(this)來告訴程序監聽按鈕按下時的事件由於ActionListener是一個程序接口因此我們在類的申明的地方也得做一點小小的修改:public class KyodaiUI extends JFrame implements ActionListener {}實現ActionListener接口是為了告訴程序我要進行事件處理了當然最後我們得添加響應事件的代碼:
  
  public void actionPerformed(ActionEvent e) {
  if (egetSource() == about) {
  JOptionPaneshowMessageDialog(this 我的大名 關於
  JOptionPaneINFORMATION_MESSAGE);
  return ;
  }
  }
  
  其中egetSource() 表示當前觸發事件的控件由於我們的程序中往往會有多個以上的控件這些控件都有可能產生事件所以我們必須使用這個方法來找到產生事情的控件
  
  小結
  
  讓我們一起來回顧一下今天所學的內容:首先我們了解了頂層容器也知道了控件分為容器控件和非容器控件同時還知道使用邊框最後我們還小小的處理了一下按鈕的事件
  
  學而時習之不亦說乎就讓我留點小小的作業幫助大家鞏固一下今天所學的內容:上面我們添加的按鈕在菜單欄的中間並不美觀
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25907.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.