版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年重慶安全技術(shù)職業(yè)學院單招職業(yè)技能筆試備考試題帶答案解析
- 2026年麗水職業(yè)技術(shù)學院單招職業(yè)技能筆試模擬試題帶答案解析
- 2026年遼寧民族師范高等??茖W校高職單招職業(yè)適應性測試備考試題帶答案解析
- 2026年吉林省經(jīng)濟管理干部學院單招綜合素質(zhì)考試備考題庫附答案詳解
- 2026年江西制造職業(yè)技術(shù)學院高職單招職業(yè)適應性考試參考題庫帶答案解析
- 2025年貴州中儲糧筆試答案
- 2025年延慶幼兒園教師招聘筆試及答案
- 2025年同時通過兩場筆試及答案
- 2025年株洲天元區(qū)語文筆試及答案
- 《國際快遞實務》課件-6.3 客戶滿意度
- 政務大模型發(fā)展研究報告(2025年)
- 2025年國家開放大學《馬克思主義基本原理》期末考試參考題庫及答案解析
- 空管面試高分技巧
- 《聽力考試室技術(shù)規(guī)范》
- 2024年廣東省高職高考語文試卷及答案
- 人工智能在職業(yè)院校人才培養(yǎng)中的應用研究報告
- 土方開挖回填施工應急預案方案
- 2025年普通高中學業(yè)水平選擇性考試(福建卷)歷史試題(含答案)
- 院感消毒隔離培訓課件教學
- 街道人民調(diào)解工作課件
- 累計預扣法工資表模板-自動計算
評論
0/150
提交評論