王霏 侯偉冬
摘要:Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性。該文基于JAVA語言,在介紹JAVA概念的基礎(chǔ)上,實現(xiàn)了圖像生成器的簡單設(shè)計,通過運行程序,可以繪制各種圖形,并且可以對圖形進行預(yù)覽、保存等操作。
關(guān)鍵詞:JAVA;面向?qū)ο?;圖像生成
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)20-4889-03
JAVA-based Image Generator Design and Implementation
WANG Fei, HOU Wei-dong
(The Baicheng Medical College, Baicheng 137000,China)
Abstract: Java is a cross-platform application software can write object-oriented programming language. Java technology offers excellent versatility, efficiency, platform portability, and security. This paper is based on the JAVA programming language, introduced the JAVA con cept to achieve a simple design of the image generator to run the program, you can draw a variety of graphics and graphics preview, save, and other operations.
Key words: JAVA; object-oriented; image generation
1 JAVA概述
Java是一種完全面向?qū)ο蟮木幊陶Z言,既是一種解釋執(zhí)行的語言,也是一種編譯執(zhí)行的語言。Java可用來生成兩類程序:應(yīng)用程序、小應(yīng)用程序(Applet)。JAVA主要具有幾個特點:
1)簡單:屏棄了C++中許多容易出錯和混淆的概念,比如指針、運算符重載、多重繼承等。Java還通過實現(xiàn)自動垃圾回收機制而大大簡化了程序設(shè)計人員對內(nèi)存的管理工作,減少了錯誤的發(fā)生。
2)面向?qū)ο螅夯趯ο蟮木幊谈先说乃季S模式,使人們更容易編寫程序。
3)多線程:Java內(nèi)置了對多線程的支持。多線程使應(yīng)用程序能夠并行執(zhí)行,而且同步機制保證了對共享數(shù)據(jù)的正確操作。
4)平臺無關(guān)性:也就是常說的跨平臺。Java程序被編譯成字節(jié)碼的形式,在有Java虛擬機的系統(tǒng)上就能夠運行java程序。也就是一次寫成,處處運行。
5)動態(tài)性:Java的基本組成單元是類,有些類是自己編寫的,有些是從類庫中引入的,而類又是運行時動態(tài)加載的,這就使得Ja va可以在分布計算功能中動態(tài)的維護程序及類庫,而不像C++那樣,每當類庫升級之后,相應(yīng)的程序都必須重新修改,編譯。
Java和C++的區(qū)別主要有以下幾點:1)Java屏棄了煩瑣的指針;2)Java不支持預(yù)處理功能;3)Java不支持多重繼承;4)Java不支持操作符重載;5)自動內(nèi)存管理;6)方便的字符串功能;7)強大的異常處理機制。
2設(shè)計內(nèi)容
該文基于JAVA語言,在介紹JAVA概念的基礎(chǔ)上,實現(xiàn)了圖像生成器的簡單設(shè)計。圖像生成器具有繪制直線、空心圓、實心圓、空心矩形、實心矩形、空心圓角矩形、實心圓角矩形、空心橢圓、實心橢圓等各種圖形,具有橡皮擦、選擇線條粗細及線條顏色在當前光標處插入文字、設(shè)置字號字形等工具,可以打開、保存、預(yù)覽圖形文件,獲取當前屏幕在繪圖區(qū)域顯示,可以設(shè)置窗口的風(fēng)格,狀態(tài)欄上顯示當前鼠標的位置及系統(tǒng)當前時間。
通過設(shè)計,可以達到幾下要求:
1)用戶可選擇對應(yīng)圖形按鈕繪制對應(yīng)圖形也可以隨意畫,可以任意改變線條的粗細及線條顏色,插入自己滿意的字號字形的文字,畫好后可以保存為.MP文件。
2)對于自己畫錯或不滿意的地方可以用橡皮擦擦除,橡皮擦的擦拭范圍的寬窄可以改變。
3)可以打開及保存MP文件、預(yù)覽圖形文件。
4)通過選擇相應(yīng)的窗口風(fēng)格選項來改變當前窗口的顯示風(fēng)格。
5)通過視圖工具欄的工具欄的相應(yīng)選取項來控制常用工具欄、繪圖工具欄及狀態(tài)欄的顯示與否。
6)可以獲取屏幕的內(nèi)容在當前繪圖區(qū)域顯示。
3總體設(shè)計
3.1圖像生成器窗體的設(shè)計
在設(shè)計的Making picture窗口中使用的是BorderLayout布局菜單欄上有文件、視圖、設(shè)置、風(fēng)格、幫助菜單項。在菜單項下是常用工具欄,常用工具欄上有新建、打開、保存、獲取屏幕、清除、繪制圖形、插入文字及文字的字號、字形的按鈕,窗口的左邊是繪圖工具欄,上面有鉛筆、直線、、空心圓、實心圓、空心矩形、實心矩形、空心圓角矩形、實心圓角矩形、空心橢圓、實心橢圓、橡皮擦、選擇線條粗細及線條顏色的按鈕,窗口最下面是狀態(tài)欄,狀態(tài)欄的左邊顯示當前鼠標的狀態(tài)和位置,右邊顯示系統(tǒng)當前時間。鼠標指到常用工具欄和繪圖工具欄上的相就按鈕上時有相應(yīng)的提示。窗口中間是繪圖區(qū)域以白色為背景。
3.2相應(yīng)功能設(shè)計
4程序主要源代碼及說明
因篇幅有限,截取部分源代碼如下:
class Line extends drawings //直線類
{void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
g2d.drawLine(x1,y1,x2,y2);}}
class Rect extends drawings//矩形類
{ void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2));
}}
……
class DrawPanel extends JPanel
{ BufferedImage scrImg = null; public DrawPanel()
{setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
setBackground(Color.white);//設(shè)置繪圖區(qū)域背景為白色
addMouseListener(new mouseA());//監(jiān)聽鼠標相應(yīng)事件操作
addMouseMotionListener(new mouseB());//用來監(jiān)聽鼠標拖動和鼠標移動時的相應(yīng)操作} public void drawScreen()//定義獲取當前屏幕的方法
{ Robot robot= null;//定義Robot對象以調(diào)用Robot.createScreenCapture方法RectanglescrRect= null; Graphics g = this.getGraphics(); try
{robot = new Robot();
Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();//桌面屏幕尺寸
scrRect = new Rectangle(0, 0, scrSize.width, scrSize.height);
scrImg = robot.createScreenCapture(scrRect);
}catch (Exception ex)
{ JOptionPane.showMessageDialog(frame," " + ex.toString());}
if (scrImg != null)
{int iWidth = this.getWidth();
int iHeight = this.getHeight();
g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0, 0, scrImg.getWidth(),
scrImg.getHeight(), null);//在繪圖區(qū)域顯示當前屏幕的圖象
}g.dispose();
}protected void paintComponent(Graphics g)
{super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;//定義畫筆
int j=0;
if (scrImg != null)
{ int iWidth = this.getWidth();
int iHeight = this.getHeight();
g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0, 0, scrImg.getWidth(),
scrImg.getHeight(),null);
} while (j<=index)
{draw(g2d,itemList[j]);
j++;
} }
void draw(Graphics2D g2d,drawings i)
{i.draw(g2d);//將畫筆傳入到各個子類中,用來完成各自的繪圖}}
5程序效果顯示圖
繪制各種圖形界面如圖1所示。
圖1
打開文件界面如圖2所示。
圖2
保存文件界面如圖3所示。
改變顏色界面如圖4所示。
6結(jié)束語
該文實現(xiàn)了圖像生成器的基本功能,通過實驗程序運行良好,達到了預(yù)期效果。
參考文獻:
[1] Deitel H M, Deitel P J.Java程序設(shè)計教程[M].5版.施平安,施惠瓊,柳賜佳,譯.北京:清華大學(xué)出版社,2004.
[2]布雷.java2精要語言詳解與編程指南[M].北京:清華大學(xué)出版社,2002.
[3]青野雅樹.基于Java的計算機圖形學(xué)[M].北京:科學(xué)出版社,2004.