① java 面向對象設計 運用GUI技術的開發 進行小游戲程序的開發
/*原始圖片分為16塊第一塊為空白
*我是這樣想的:
*因為無法將圖片分成15份而放到16塊的區域中(至少是很難實現)
*因此將原世散始圖片中一部分處理成白色,這樣就好處理了
*/
importjava.awt.Graphics;
importjava.awt.GridLayout;
importjava.awt.Image;
importjava.awt.MediaTracker;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.image.BufferedImage;
importjava.util.HashSet;
importjava.util.Iterator;
importjava.util.Random;
importjava.util.Set;
importjavax.print.attribute.standard.Media;
importjavax.swing.AbstractButton;
importjavax.swing.Icon;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
{
intcurrx,curry,cx,cy;
Imageimg,whiteimg;
Iconimg1;
IconcurrIcon;
BufferedImagebimg,white;
BufferedImage[][]subimg;
intwidth,height;
JButton[][]jb;
publicPintu(){
this.setLayout(newGridLayout(4,4));
img=this.getToolkit().getImage("吵瞎E:\1.jpg");
whiteimg=this.getToolkit().getImage("E:\2.jpg");
MediaTrackerme=newMediaTracker(this);
me.addImage(img,0);
try{
me.waitForAll(0);
}catch(InterruptedExceptione){
//TODO自動生成catch塊
e.printStackTrace();
}
width=img.getWidth(this);
height=img.getHeight(this);
bimg=newBufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphicsbg=bimg.getGraphics();
bg.drawImage(img,0,0,this);
subimg=newBufferedImage[4][4];
inta[]=newint[4];
for(inti=0;i<a.length;i++){
a[i]=(int)(Math.random()*4);
for(intk=0;k<i;k++){
if(a[i]==a[k]){
i--;
continue;
}
}
}
for(intx=0;x<4;x++){
for(inty=0;y<4;y++)
subimg[a[x]][a[y]]=bimg.getSubimage(width*x/4,height*y/4,width/4,height/4);
}
currx=a[0];curry=a[0];
white=subimg[currx][curry];
jb=newJButton[4][4];
for(inti=0;i<4;i++){
for(intj=0;j<4;j++){
jb[i][j]=newJButton();
jb[i][j].addMouseListener((MouseListener)升返空this);
this.add(jb[i][j]);
jb[i][j].setIcon(newImageIcon(subimg[i][j]));
}
}
setSize(img.getWidth(this),img.getHeight(this));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/*publicvoidpaint(Graphicsg){
g.drawImage(subimg[0],0,0,this);
}*/
publicstaticvoidmain(String[]args){
newPintu();
}
publicvoidmouseClicked(MouseEvente){
for(inti=0;i<4;i++)
for(intj=0;j<4;j++)
if(((AbstractButton)e.getSource())==jb[i][j]){cx=i;cy=j;}
if(((cx==currx)&&(((cy-curry)==1)||((curry-cy)==1)))||((cy==curry)&&(((cx-currx)==1)||((currx-cx)==1))))
{
System.out.println(""+cx+""+cy);
currIcon=jb[cx][cy].getIcon();
jb[cx][cy].setIcon(newImageIcon(white));
jb[currx][curry].setIcon(currIcon);
currx=cx;curry=cy;
}
}
@Override
publicvoidmouseEntered(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseExited(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmousePressed(MouseEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseReleased(MouseEvente){
//TODOAuto-generatedmethodstub
}
}
就是照著你說的那個改的。。。。效果圖如下:
② 要用JAVA開發GUI,SWT,Jface,RCP有什麼聯系什麼關系。
jsf是表示層的框架,主要是web界面方面的應用;而其他的都屬於桌面UI庫,與前者不同,在此不做比較。
AWT是java早期版本使用的UI庫,為了跨平台,它指提供各個平台上支持的組件的最大公約數集合..比如蘋果操作系統並不支持按鈕的圖片展示,於是AWT的按鈕是無法使用圖片的;AWT的實現是以本機對等體的方式來實現的,即一個Button對象則對應於本機一個窗口組件(利用本地程序實現映射),於是AWT組件與本地組件長得是一模一樣的。
SWING則是基於AWT的基礎上做了許多擴展,它提供的是各種平台上支持的組件的最小公倍數集合..在設計上使用了MVC(分UI、Component、Model),除了窗口之外,其大部分組件都使用Java2D來實現渲染模擬,也因為如此,Swing在渲染方面的靈活性非常大。
SWT是IBM公司針對Java桌面UI開發出來的另一個分支,它的實現方式與AWT類似,都使用了本機對等體的實現,於是它的組件也與本機組件非常雷同;此外它遵循最小公倍數原則,對於非公共組件部分,它又使用了類似Draw2D庫的API來模擬渲染。JFace是SWT的增強包,它是對SWT的進一步封裝,使得SWT界面開發的模塊劃分更加清晰,代碼也更加維護。
綜上,在渲染的靈活性上面,swing是最優的,因為它的渲染可在java程序中實現(MVC),而AWT和SWT則因為本機對等體的緣故不是那麼靈活;在內存佔用上面,AWT和SWT比swing要少得多,而且也響應也要快一些,這是因為Swing將組件的渲染信息(甚至是像素信息)都放在程序內存中,並由自己管理,所以Swing界面響應很慢是不足為怪的~~;在支持的組件集合上,SWT和Swing比AWT豐富得多;最後,在穩定性上面,SWT稍顯不足~~
上面的幾種UI庫中,Swing和SWT都占據一定的份額吧,Swing在一些報表圖形展示方面有更好的靈活性,也有比較好的開源組件支持(如JFreeChart);而SWT在快速應用開發方面是非常合適的,Eclipse界面便是SWT的實現,而也基於此出現了Eclipse RCP技術(類似於MFC),該技術整合了SWT
③ GUI在java開發中重要嗎
現在不李宏是很重要,java開發中市場最大的是j2ee作b/s模式,至於c/s模式下,vb
,c#都語言鏈旁作的界面都要比java做的好看而且開發周期短。
用java開發c/s(桌面程序)太麻煩。開發周期長,所以用的人不多。以後什麼樣就不知道了。
適當的了解下,做個小的桌棚擾橡面程序也好,編程語言這種事情誰也說不好再過幾年那個又發展起來了。
④ Java GUI的發展和演化簡史
當Java在 年的春天第一次發布的時候 它包含了一個叫AWT(Abstract Windowing Toolkit)的庫 用來構建圖形用戶界面應用程序 Java很有雄心的宣言-- write once run anywhere 許諾 一個具有下拉菜單 命令按鈕 滾動條以及其他常見的GUI控制項的應用程序將能夠在各種操作系統上運行而不必重新編譯成針對某一平台的二進制代碼 包括Microsoft Windows Sun s own Solaris Apple s Mac OS以及Linux
雖然最初Java是支持操作系統獨立的應用程序開發 在Java提出 write once run anywhere 宣言那段時間的革命導致了Java applet和主導桌面應用程序計劃的產生
盡管從那以後大部分構建桌面應用程序的成就都慢慢衰退 Java構建圖形用戶界面的能力反倒增強了 跟蹤Java GUI的發展和演化 我們將發現 個主要的構建窗口程序庫:AWT Swing和SWT(Standard Widget Toolkit) 在這一章里我們將查看和分析這 個庫中的每一個庫 並且我們將一起來看一看第 個庫--JFace 其實JFace不算一個真正的構建窗口程序庫 而是在基於SWT之上的一個抽象層
AWT
很多圍繞著介紹Java技術的令人激動的地方都基於applets--一個可以讓程序通過Internet發布並在瀏覽器內執行的新技術 用戶和開發人員都熱衷於斯 因為applets許諾將簡化跨平台應用程序的開發 維護和發布 而這是商業軟體開發中幾個最富挑戰性的話題
為了方便用Java構團薯虛建圖形用戶界面 Sun最初提供了一個在所有平台下具有的獨特Java外觀的圖形界面庫 Sun在手鎮applet技術策略方面的首要夥伴Netscape提出applets應該維塌燃持和運行時平台一樣的外觀 他們希望applets在某一平台下在顯示和行為上能夠像其他應用程序一樣
為了實現Netscape的 本地外觀 的目標 在JDK的第一個發布版中包含了AWT這個庫 AWT的預設實現使用了 對等 機制 即每一個Java GUI窗口部件都在底層的窗口系統中有一個對應的組件
例如 每一個java awt Button對象將在底層窗口系統中創建一個唯一對應的button 當用戶點擊那個按鈕的時候 事件將從本地實現庫傳送到Java虛擬機里 並且最終傳送到與java awt Button對象相關聯的邏輯 對等系統的實現以及Java組件與對等組件之間的交流的實現都隱藏在底層JVM實現中 Java語言級的代碼仍然跨平台
盡管如此 為了保持 write once run anywhere 的許諾 Java不得不妥協和折衷 特別的 Java採用了 最小公分母 的方法 即AWT僅僅提供所有本地窗口系統都提供的特性 這就需要開發人員為更多高級特性開發他們自己的高級窗口部件 然後提供給用戶不同的使用體驗
其他的問題也減緩了人們對applets的接受和承認 Applets運行在一個安全的 沙箱 裡面並且能夠阻止惡意的applets對文件系統 網路連接等資源的濫用 盡管沙箱提供了安全性 但它 *** 了應用程序 畢竟一個應用程序不能運用一個網路連接來保存一個文件是不好的 Java GUI應用程序也不能像本地程序一樣響應靈敏 這是在當前硬體平台和Java的解釋性天性下預期結果
所以 用AWT開發的應用程序既缺少流行GUI程序的許多特性 又不能達到在顯示和行為上像用本地窗口構建庫開發的程序一樣的目標 應該有一個更好的庫來讓Java GUI取得成功
Swing
於 年JavaOne大會上提出並在 年 月發布的JFC(Java Foundation Classes)包含了一個新的使用Java窗口開發包 這個新的GUI組件叫做Swing 感覺到它是對AWT的升級 並且看起來對Java占據計算機世界很有幫助 對Java來說已經萬事具備了:可下載的applets將是未來的軟體 人們將從其他操作系統轉向JavaOS 從傳統的計算機轉向叫做JavaStation的瘦客戶端網路計算機 Microsoft將最終因為不能在桌面程序領域與之想抗衡而被廢黜 雖然這些景象從來沒有實現 Swing作為Java applets和applications的GUI庫倒確實十分繁榮
Swing架構
盡管 Swing 僅僅是這個新組件的指代名稱 它一直持續使用到今天 可能是因為這個名稱太貼切了 Swing嘗試著以以下幾種方式改變公認的觀點:
AWT依賴對等架構 用Java代碼包裝本地窗口部件 Swing卻根本不使用本地代碼和本地窗口部件
AWT把繪制屏幕交給本地窗口部件 Swing自己的組件繪制自己
因為Swing不依賴本地窗口部件 它可以拋棄AWT的最小公分母的方法並在每個平台下實現每個窗口部件 從而創建一個比AWT更強大的開發工具包
Swring預設情況下採用本地平台的顯示外觀 然而 它並不僅僅限於此 而是還可以採用插件式的顯示外觀 因此Swing應用程序可以看起來想Windows應用程序 Motif應用程序 Mac應用程序甚至它自己的顯示外觀-- 金屬 所以 Swing應用程序可以完全忽略它運行時所在的操作系統環境並且僅僅看起來像自己 這是單調一致的桌面應用程序外觀的一大挑釁 想像一下Swing有多傲慢!
盡管如此 Swing組件超越了簡單的窗口部件 它體現了正不斷出現的設計模式以及一些最佳實踐 採用Swing 你不僅僅得到GUI窗口部件的句柄和它所包含的數據 而是定義一個模型去保存數據 定義一個視圖去顯示數據 定義一個控制器去響應用戶輸入 事實上 大部分Swing組件的構建是基於MVC(model view controller)模式的 MVC使應用程序開發變得更清晰 更易維護和管理
Swing的缺點
盡管Swing在AWT的基礎上做出了巨大的改進 它仍然沒能使Java作為構建桌面應用程序的工具 也許Swing的擁護者會立即舉出Swing的成功應用案例 例如開源文本編輯器jEdit或者Borland的UML(Unified Modeling Language)建模工具Together 但是Swing應用程序仍然在桌面應用方面顯得很少 Sun提出了一個記錄可得到的Swing應用程序的列表 Swing Sightings 來證明Swing應用是值得注目的 然而我們也看到了 C++ Sightings 和 Visual Basic Sightings 的網頁
為什麼Swing沒有履行它的諾言?原因可能歸結為下面兩點:
速度的缺乏
界面外觀
Swing的狂熱者可能會對Swing速度慢這一點感到忿忿不平 不可否認 JIT(just in time)編譯器 Java虛擬機以及Java語言本身就使得Swing應用程序和本地程序拉開了一定差距 盡管如此 Swing仍顯得比本地應用程序行動緩慢和響應不積極 由於桌面計算變得越來越快 用戶的速度期望值也隨之增加 任何可感知的遲緩都將是無法忍受的
對Swing的顯示外觀的問題的抱怨也引起了Swing的開發者的憤怒 畢竟他么宣稱Swing擁有各種可插入式的外觀 並且事實上可以顯示成任何樣子 J SE 甚至添加了對Windows XP和GTK+的支持 以致於在這些平台下運行的Swing應用程序會自動採用該平台的外觀
盡管如此 問題仍然存在:Swing將一直處於最新的圖形用戶界面的後面 因為必需在Java庫里明確地添加對最新GUI的支持 當使用J SE 或更早的版本時在Windows XP上運行的Swing應用程序將顯現為Windows 的外觀 而且 當使用XP themes或WindowBlinds等軟體來改變皮膚或圖形外觀時用戶日益銘記他們自己的特徵和個性 而Swing不僅不理會操作系統 甚至連用戶參數選擇也不理會
簡短的說 Swing應用程序不像本地應用程序一樣執行 外觀也不一樣 Java要想擺脫常年以來處於不斷學習中的地位並掌握桌面應用程序開發中的眾多角色 它的GUI仍需要改進
SWT
當社區人員開始構建Eclipse時 他們意識到Swing和AWT都不足以用來構建真實世界的商業程序 結果 他們決定構建一套新的GUI開發工具包用來顯示Eclipse界面 這個工具包借用了VisualAge SmallTalk中的大量的庫 他們把這個新的工具包命名為SWT(Standard Widget Toolkit) 意識到本地行為需要本地窗口部件 SWT的設計者們採用了AWT的對等架構 而僅僅當本地組件不存在時(例如Motif下的樹形組件)才求助於Java實現 這樣 SWT吸收了AWT和Swing實現的最好的部分:當可以得到本地組件時使用本地實現 當不能得到本地組件時使用Java實現 這就同時保證了與本地窗口部件相當的外觀和響應度
SWT於 年與Eclipse IDE(Integrated Development Environment)一起集成發布 在這個最初發布版之後 SWT發展和演化為一個獨立的版本 它可以使用與眾多操作系統 包括Microsoft Windows Mac OS X以及幾種不同風格的Unix等 寫作本書的這個時候 當前官方發布版本為 版為beta版 現在也可以下載 本系列文章採用SWT
另一個重要的優勢為SWT的源代碼是在一個開源許可下免費可得並無病毒的 這就意味著你可以在你的應用程序中使用SWT並且在任何許可認證下發布它 源代碼對理解SWT庫的低級別功能性和調試應用程序都是很有幫助的 開源軟體也意味著比商業發布軟體更新的更加頻繁
JFace
JFace的構建基於SWT 它提供了SWT的功能和更簡易的MVC模式 SWT使用直接的API提供了原生的窗口部件 例如 你創建一個table部件並且插入你想顯示的行和列的數據 JFace則提供了在SWT基礎之上的抽象層 所以你可以對抽象層編程然後抽象層與SWT API交互來替代直接對SWT API編程 考慮一下對本地C窗口部件介面編程同使用C++GUI類庫的區別或是使用AWT與Swing的區別 這些類比將有助於闡述SWT與JFace的區別 例如 為了使用JFace中的table 你仍舊創建table窗口部件 但是你不向裡面插入數據 反而 你將你的content(或model) provider類和你的display(或 view) provider類提供給它 接著 table調用你提供的類來決定數據內容和怎樣顯示數據內容 JFace沒有徹底地抽象SWT 即使在用JFace寫的程序中也會常常出現SWT及它的低級API 在本文第二部分帶領您構建正確的SWT基礎之後 我們將在第三部分探究JFace的力量
總結
lishixin/Article/program/Java/hx/201311/26708
⑤ Java GUI用戶界面編程的基礎
Java的GUI編程(Graphic User Interface 圖形用戶介面) 是在它的抽象窗口工具箱(Abstract Window Toolkit AWT)上實現的 java awt是AWT的工具類庫 其中包括了豐富的圖形 用戶界面元件和布局管理器的支持
GUI主要用在兩個地方
◆Application
◆Applet
)GUI界面
在Java GUI中 用戶與程序之間交互的一個控制面板 其內包含有菜單 控制項(或組件) 容器並旁隱能響應用戶的事件
現在有各種各樣的窗口系統 不同的窗口系統提供給程序設計的程序庫是大不攔旁一樣的 例如 基於Windows的SDK 和基於Unix平台的X Windows的Xlib
為了使程序能在不同的窗口系統下運行 Java提出了 抽象窗口系統 的概念 提供了AWT(抽象窗口工具箱) 使得Java能夠在不同的窗口系統下運行
)Java中的GUI實現方式
採用AWT(抽象窗口工具集)從而可使Java GUI適用於不同OS的環境 打造多系統的用戶界面
特點如下
① 其具體實現由目標平台下的OS來解釋 從而導致Java GUI在不同平台下會出現不同的運行效果(窗口外觀 字體等的顯示效果會發生變化)
② 組件在設計時不應採用絕對定位 而應採用布局管理器來實現相對定位 以簡啟橡達到與平台及設備無關
)新增的Java Swing GUI組件
lishixin/Article/program/Java/hx/201311/26362
⑥ Java實現GUI編程基本方法都有那些
其實無論在什麼平台下,GUI應用程序的基本開發方法都是相似的。一般都包括下面這樣四個步驟:
①創建容器
首先要創建一個GUI應用程序,需要創建一個用於容納所有其它GUI組件元素的載體,Java中稱為容器。典型的包括窗口(Window)、框架(Frame/JFrame)、對話框(Dialog/JDialog)、面板(Panel/JPanel)等。只有先創建了這些容器,其它界面元素如按鈕(Button/JButton)、標簽(Label/JLabel)、文本框(TextField/JTextField)等才有地方放。
②添加組件
為了實現GUI應用程序的功能,為了與用戶交換,需要在容器上添加各種組件/控制項。這需要根據具體的功能要求來決定用什麼組件。例如,如果需要提示信息,可用標簽(Label/JLabel);如果需要輸入少量文本,可用文本框(TextField/JTextField);如果需要輸入較多文本,可用文本區域(TextArea/JTextArea);如果需要輸入密碼,可用密碼域(JPasswordField)等等。
③安排組件
與傳統的Windows環境下的GUI軟體開發工具不同,為了更好地實現跨平台,Java程序中各組件的位置、大小一般不是以絕對量來衡量,而是以相對量來衡量。例如有時候,程序的組件的位置是按"東/East"、"西/West"、"南/South"、"北/North"、"中 /Center"這種方位來標識的。因此,在組織界面時,除了要考慮所需的組件種類外,還需要考慮如何安排這些組件的位置與大小。這一般是通過設置布局管理器(Layout Manager)及其相關屬性來實現的。事實上上述按方位來安排組件就是採用了Java中多種布局管理器里的BorderLayout布局管理器。
④處理事件
為了完成一個GUI應用程序所應具備的功能,除了適當地安排各種組件產生美觀的界面外,還需要處理各種界面元素事件,以便真正實現與用戶的交換,完成程序的功能。在Java程序中這一般是通過實現適當的事件監聽者介面來完成的。比如如果需要響應按鈕事件,就需要實現 ActionListener監聽者介面;如果需要響應窗口事件,就需要實現WindowListener監聽者介面。
⑦ 【java界面開發】常有人說java不適合開發GUI,想問java在GUI開發上究竟有什麼缺點
說不適合,主要是指沒有成熟、好用(易用)、漂亮的GUI框架,因為做JAVA的人,不是很關注這方面。
現在來講,JAVA的GUI好很多了。
C++如果不用框架,本身沒有這方面的,都是要用系統的SDK的。如果C++ 和 QT 寫GUI,也很方便。