結(jié)課論文JAVA畫圖板設計_第1頁
結(jié)課論文JAVA畫圖板設計_第2頁
結(jié)課論文JAVA畫圖板設計_第3頁
結(jié)課論文JAVA畫圖板設計_第4頁
結(jié)課論文JAVA畫圖板設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java論文

東北大學秦皇島分校計算機系 第

PAGE

18

JAVA程序設計

結(jié)課論文

題目:JAVA畫圖板設計

學號:

姓名:

提交日期:

成績:

簡短評語:

教師簽字:

東北大學秦皇島分校計算機工程系

目錄

一.摘要 3

二.概要設計 3

2.1.介紹說明 4

2.2.程序流程圖 4

2.3.程序中自定義類說明 4

三.詳細設計 6

四.測試分析 16

4.1.程序運行情況 16

4.2.尚需解決的問題 17

五.心得體會 17

七.致謝 18

1.摘要:本程序通過調(diào)用JAVA提供的BorderLayout,Button,Color;Container;Graphics;Panel;ButtonGroup;JFrame;JPanel;UIManager等基本類進行了簡單的界面設計,運用了JAVA中類的繼承特性實現(xiàn)了對父類方法的調(diào)用,并多次使用CASE語句實現(xiàn)繪圖菜單的選擇,運用了適配器類簡化了監(jiān)聽器類的重寫工作。

關(guān)鍵字:UIManager、ActionListener

二.概要設計

2.1Java,是一種可以編寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言,由升陽(太陽微電子,SunMicrosystems)公司的JamesGosling等人于1990年代初開發(fā)。Java好象隨處可見-甚至在TV中。盡管如此,說清楚Java是什么和它能做什么卻不那么容易。Java既可以被編譯,也可以被解釋。通過編譯器,可以把Java程序翻譯成一種中間代碼-稱為字節(jié)碼-可以被Java解釋器解釋的獨立于平臺的代碼。通過解釋器,每條Java字節(jié)指令被分析,然后在計算機上運行。只需編譯一次,程序運行時解釋執(zhí)行。

可以把Java字節(jié)碼看作運行在Java虛擬機(JavaVM)上的機器

代碼指令。每中Java解釋器,不管是Java開發(fā)工具還是可以運行Java小應用程序的Web瀏覽器,都是一種JavaVM的實例。JavaVM也可以由硬件實現(xiàn)。

本次實現(xiàn)的畫圖板程序簡單明了不煩瑣但含有一定技術(shù)性,使初學著能夠運用JAVA語言了解領(lǐng)悟其中的要領(lǐng),通過運用JAVA的一些基本技術(shù)實現(xiàn)對畫圖板的運用。

2.2.程序流程圖

界面

菜單欄

工作區(qū)

矩形

橢圓

圓形

填充

鼠標動作監(jiān)聽

選擇

繪制

菜單選擇監(jiān)聽

2.3.程序中自定義類說明

類名

作用

BorderLayout

布局管理器的一種,一個面板分東南西北中五個區(qū),用于放置控間,這樣

GUI在放大縮小,移植的時候方便

Button

此類創(chuàng)建一個標簽按鈕

Color

Color類用于封裝默認sRGB顏色空間中的顏色,或者用于封裝由ColorSpace標識的任意顏色空間中的顏色。

Container

一般的AbstractWindowToolkit(AWT)容器對象是一個可包含其他AWT組件的組件

Graphics

定義一個真正的工具,用來接受圖形操作

Panel

Panel是最簡單的容器類

ActionEvent

知道如何對自身進行指派的事件的接口

ActionListener

用于接收操作事件的偵聽器接口

MouseAdapter

接收鼠標事件的抽象適配器類

MouseEvent

鼠標事件

MouseListener

用于接收組件上“感興趣”的鼠標事件(按下、釋放、單擊、進入或離開)的偵聽器接口。

MouseMotionAdapter

接收鼠標移動事件的適配器

MouseMotionListener

用于接收組件上的鼠標移動事件的偵聽器接口

ButtonGroup

此類用于為一組按鈕創(chuàng)建一個多斥(multiple-exclusion)作用域

Component

是對數(shù)據(jù)和方法的簡單封裝

JFrame

java.awt.Frame的擴展版本,該版本添加了對JFC/Swing組件架構(gòu)的支持

JPanel

JPanel是一般輕量級容器

UIManager

此類跟蹤當前的外觀及其默認設置

方法

UIManager

這個類就是Swing界面管理的核心,管理Swing的小應用程序以及應用程序樣式的狀態(tài)。UIManager類提供了一些靜態(tài)方法用于更換與管理“LookandFeel”

setDefaultCloseOperation

添加鼠標觸發(fā)事件

paintingGround

對鼠標的輸入進行判斷并調(diào)用畫圖程序

三.詳細設計

//#8.15

//#filename:ShapeMain.java

importjava.awt.BorderLayout;//布局管理器的一種,一個面板分東南西北中五個區(qū),用于放置控間,這樣GUI在放大縮小,移植的時候方便

importjava.awt.Button;

importjava.awt.Color;

importjava.awt.Container;//一般的AbstractWindowToolkit(AWT)容器對象是一個可包含其他AWT組件的組件

importjava.awt.Graphics;//定義一個真正的工具,用來接受圖形操作

importjava.awt.Panel;//Panel是最簡單的容器類

importjava.awt.event.ActionEvent;//知道如何對自身進行指派的事件的接口

importjava.awt.event.ActionListener;//用于接收操作事件的偵聽器接口

importjava.awt.event.MouseAdapter;//接收鼠標事件的抽象適配器類

importjava.awt.event.MouseEvent;//鼠標事件

importjava.awt.event.MouseListener;//用于接收組件上“感興趣”的鼠標事件(按下、釋放、單擊、進入或離開)的偵聽器接口。

importjava.awt.event.MouseMotionAdapter;//接收鼠標移動事件的適配器

importjava.awt.event.MouseMotionListener;//用于接收組件上的鼠標移動事件的偵聽器接口

importjavax.swing.ButtonGroup;//此類用于為一組按鈕創(chuàng)建一個多斥(multiple-exclusion)作用域

importjavax.swing.JFrame;//java.awt.Frame的擴展版本,該版本添加了對JFC/Swing組件架構(gòu)的支持

importjavax.swing.JPanel;JPanel//是一般輕量級容器

importjavax.swing.UIManager;//此類跟蹤當前的外觀及其默認設置

//importjavax.swing.Component;//對數(shù)據(jù)和方法的簡單封裝

publicclassShapeMainextendsJFrameimplementsActionListener,MouseListener,MouseMotionListener{

intx,y,x1,y1,x2,y2,width,height;

booleanisFirstPoint=true;

//初始化開始畫的是線

intdrawType=PaintingGround.LINE;

//初始化開始不是填充

booleanisFill=false;

//添加控件

ButtonGroupbtg=newButtonGroup();

ButtonbtLine=newButton("線");

ButtonbtRectangle=newButton("矩形");

ButtonbtRound=newButton("圓");

ButtonbtEllipse=newButton("橢圓");

ButtontbFillState=newButton("填充");

Buttonbutton3=newButton("文本操作");

Buttonbutton2=newButton("清除");

Buttonbutton1=newButton("選擇顏色");

PanelbuttonPanel=newPanel();

PaintingGroundpaintingGround=newPaintingGround();

//MainMethod

publicstaticvoidmain(String[]args){

//設置顯示外觀

try{

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

}catch(Exceptione){

e.printStackTrace();

}

newShapeMain();

}

//構(gòu)造函數(shù)

publicShapeMain(){

//控件添加到控件組中

//btg.add(btLine);

//btg.add(btRectangle);

//btg.add(btRound);

//btg.add(btEllipse);

buttonPanel.add(btLine);

buttonPanel.add(btRectangle);

buttonPanel.add(btRound);

buttonPanel.add(btEllipse);

buttonPanel.add(tbFillState);

//設置容器及容器的整體布局

Containercp=this;

cp.setLayout(newBorderLayout());

cp.add(BorderLayout.NORTH,buttonPanel);

cp.add(BorderLayout.CENTER,paintingGround);

//cp.add(BorderLayout.SOUTH,jf);

//jf.setJMenuBar(mb);

setLocation(300,150);

setSize(600,480);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

//添加鼠標觸發(fā)事件

paintingGround.addMouseListener(newMouseAdapter(){

publicvoidmouseReleased(MouseEventevn){

isFirstPoint=true;

}

});

//對鼠標的輸入進行判斷并調(diào)用畫圖程序

paintingGround.addMouseMotionListener(newMouseMotionAdapter(){

publicvoidmouseDragged(MouseEventevn){

if(isFirstPoint){

x1=evn.getX();

y1=evn.getY();

isFirstPoint=false;

}

else{

x2=evn.getX();

y2=evn.getY();

switch(drawType){

casePaintingGround.LINE:

//畫線

paintingGround.drawLine(x1,y1,x2,y2);

break;

casePaintingGround.RECTANGLE:

//畫矯形

paintingGround.drawRect(x1,y1,x2-x1,y2-y1);

break;

casePaintingGround.ROUND:

//畫圓

//兩點距離公式

intsize=Math.abs((int)Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));

paintingGround.drawRound(x1,y1,size);

break;

casePaintingGround.ELLIPSE:

//畫橢圓

paintingGround.drawEllipse(x1,y1,x2-x1,y2-y1);

break;

default:

break;

}

}

}

});

//各個控件的觸發(fā)事件

btLine.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevn){

drawType=PaintingGround.LINE;

}

});

btRectangle.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevn){

drawType=PaintingGround.RECTANGLE;

}

});

btRound.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevn){

drawType=PaintingGround.ROUND;

}

});

btEllipse.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevn){

drawType=PaintingGround.ELLIPSE;

}

});

tbFillState.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevn){

isFill=tbFillState.isShowing();

paintingGround.setFillState(isFill);

}

});

}

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseReleased(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseDragged(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseMoved(MouseEvente){

//TODOAuto-generatedmethodstub

}

}

classPaintingGroundextendsJPanel{

publicstaticfinalintLINE=1;

publicstaticfinalintRECTANGLE=2;

publicstaticfinalintROUND=3;

publicstaticfinalintELLIPSE=4;

privateintx,y;

privateintx1,y1,x2,y2;

privateintwidth,height,size;

privateintdrawType=0;

privatebooleanisFill=false;

//構(gòu)造函數(shù)

publicPaintingGround(){

setBackground(Color.black);

}

//判斷是用實心還是空心的,

publicvoidpaint(Graphicsg){

super.paint(g);

g.setColor(Color.white);

if(isFill){

switch(drawType){

caseLINE:

g.drawLine(x1,y1,x2,y2);

break;

caseRECTANGLE:

g.fillRect(x,y,width,height);

break;

caseROUND:

g.fillOval(x,y,size,size);

break;

caseELLIPSE:

g.fillOval(x,y,width,height);

break;

default:

break;

}

}

else{

switch(drawType){

caseLINE:

g.drawLine(x1,y1,x2,y2);

break;

caseRECTANGLE:

g.drawRect(x,y,width,height);

break;

caseROUND:

g.drawOval(x,y,size,size);

break;

caseELLIPSE:

g.drawOval(x,y,width,height);

break;

default:

break;

}

}

}

publicvoiddrawLine(intx1,inty1,intx2,inty2){

this.x1=x1;

this.y1=y1;

this.x2=x2;

this.y2=y2;

drawType=LINE;

repaint();

}

//具體的實現(xiàn)方式

publicvoiddrawRect(intx,inty,intwidth,intheight){

this.x=x;

this.y=y;

this.width=width;

this.height=height;

drawType=RECTANGLE;

repaint();

}

publicvoiddrawRound(intx,inty,intsize){

this.x=x;

this.y=y;

this.size=size;

drawType=ROUND;

repaint();

}

publicvoiddrawEllipse(intx,inty,intwidth,intheight){

this.x=x;

this.y=y;

this.width=width;

this.height=height;

drawType=ELLIPSE;

repaint();

}

publicvoidsetFillState(booleanisFill){

this.isFill=isFill;

}

}

四.測試分析

4.1.程序運行情況

4.2尚需解決的問題

1、畫板最小化后原有的繪圖信息將丟失(問題可能是方法不對)。2、如何設置菜單的快捷鍵?

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論