《《面向?qū)ο蟪绦蛟O計》實驗報告十一》由會員分享,可在線閱讀,更多相關《《面向?qū)ο蟪绦蛟O計》實驗報告十一(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、《面向?qū)ο蟪绦蛟O計》實驗報告
實驗十一 繪制圖形
【實驗目的】
掌握使用圖形類Graphics 畫出不同圖形的方法。
【實驗內(nèi)容】(選做一題)
1. 編寫繪制圓形程序DrawOval.java。點擊“確定”按鈕時,在畫布的指定位置畫圓。
2. 編寫移動方塊程序MoveSquare.java。
程序由二個類組成:窗體主類(表現(xiàn)層)負責控制,確定所有組件的位置,處理用戶對方塊的操作。畫布MoveCanvas類(邏輯層)負責繪圖,其paint負責繪制方塊,其方法moveUp(),moveDown(),moveLeft(),moveRight()分別響應窗體主類act
2、ionPerformed ()方法的對應的按鈕事件,再調(diào)用repaint方法來刷新圖像。
【實驗報告】
實習時間: 實習地點: 實習機號:
具
體
實
驗
內(nèi)
容
1. 編寫繪制圓形程序DrawOval.java。點擊“確定”按鈕時,在畫布的指定位置畫圓。
運行成功的程序為:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
3、import java.awt.*;
import javax.swing.*;
public class DrawOval extends JFrame implements ActionListener {
Ovalcanvas canvas;
JTextField in_R,in_X,in_Y;
JButton btn;
public static void main(String[] args) {
// TODO Auto-generated method stub
DrawOval DrawOval=new DrawOval();
}
pub
4、lic DrawOval() {
super("畫布上繪制圓");
setSize(600,300);
setVisible(true);
canvas=new Ovalcanvas();
in_R=new JTextField(6);
in_X=new JTextField(6);
in_Y=new JTextField(6);
setLayout(new FlowLayout());
add(new JLabel("輸入圓的位置坐標:"));
add(in_X);
add(in_Y);
add(new JLabel("
5、輸入圓的半徑:"));
add(in_R);
btn=new JButton("確定");
btn.addActionListener(this);
add(btn);
add(canvas);
validate();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
class Ovalcanvas extends Canvas{
int x,y,r;
void Ovalcanvas(){
setSize(200,200);
setBackground(C
6、olor.cyan);
}
public void setOval(int x,int y,int r) {
this.x=x;
this.y=y;
this.r=r;
}
public void paint(Graphics g) {
g.drawOval(x, y, 2*r, 2*r);
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int x,y,r;
7、
try {
x=Integer.parseInt(in_X.getText());
y=Integer.parseInt(in_Y.getText());
r=Integer.parseInt(in_R.getText());
canvas.setOval(x,y,r);
canvas.repaint();
}
catch(NumberFormatException ee) {
x=0;y=0;r=0;
}
}
}
結(jié)果截圖:
下面為具體實驗過程:
(1)運行,出現(xiàn)錯誤,主要是“ca
8、nnot be resolved to a type”的錯誤。
WindowEvent cannot be resolved to a type
Graphics cannot be resolved to a type
Constant cannot be resolved to a variable
Constant cannot be resolved to a variable
(2) 換了一個程序,運行,出現(xiàn)錯誤:
Multiple markers at this line- Syntax error on token "(", delete this token-
9、 Syntax error on token ")", delete this token
Multiple markers at this line
- Syntax error on token(s), misplaced construct(s)
- Syntax error on token "void", @ expected
- Syntax error, insert "interface Identifier" to complete
InterfaceHeader
(3)主窗體界面應該調(diào)研setOval(int[]x,int[]y,intN)變
10、成畫布類邏輯層。
(4)按照云課堂PPT的程序,輸入,發(fā)現(xiàn)有如下錯誤:
①Ovalcanvas cannot be resolved to a type
②Syntax error on token "Invalid Character", ; expected
③JLable cannot be resolved to a type
④Syntax error on token "Invalid Character", ; expected
⑤Multiple markers at this line
- Ovalcanvas cannot be resolved t
11、o
a type
- Ovalcanvas cannot be resolved to
a type
⑥Exception in thread "main" java.lang.Error: Unresolved compilation problem:
at DrawOval.main(DrawOval.java:9)
(5)第35行class OvalCanvas extends Canvas應該改為“class Ovalcanvas extends Canvas”,沒有注意大小寫。
(6)第14行“super("畫布上繪制圓");”這里的“;”有問
12、題,忘了使用英文符號。
(7)將以下程序: x=Integer.parseInt(jl1.getText());
y=Integer.parseInt(jl2.getText());
r=Integer.parseInt(jl3.getText());改為:
x=Integer.parseInt(in_X.getText());
y=Integer.parseInt(in_Y.getText());
r=Integer.parseInt(in_R.getText());
(8)經(jīng)過觀察,發(fā)現(xiàn)我之所以會出現(xiàn)“JLable
13、 cannot be resolved to a type”的錯誤,是因為我把“JLabel”寫出了”JLable”.
(9) 經(jīng)改善以上一系列程序錯誤以后,我運行程序,程序能運行成功,但是當我輸入圓的半徑及位置坐標之后,點擊“確定”卻無法畫出一個與之相對應的圓。明明程序是和老師PPT里的程序是一樣的,但就是畫不出圓來。
(10) 在以上問題的基礎上,首先,我將第8行的代碼“JLabel jl1,jl2;”刪除。
(11)其次,我將第22及23行的代碼jl1=new JLabel("輸入圓的位置坐標:");
this.add(jl1);改為:add(new JLabel
14、("輸入圓的位置坐標:"));
(12)最后,我將第25及26的代碼jl2=new JLabel("輸入圓的半徑:");this.add(jl2);改為:add(new JLabel("輸入圓的半徑:"));
(13) 最后的最后,經(jīng)過一系列對該程序的摸索及改正,運行成功,結(jié)果截圖為:
實
習
小
結(jié)
1.實驗一主要是卡在“cannot be resolved to a type”這里,比如說:
Ellipse2D cannot be
15、 resolved to a type(橢圓不能被解析為類型)等“cannot be resolved to a type”的類似錯誤。
這部分錯誤主要是因為沒有注意英文字母的大小寫以及中英式字符的使用而導致的,比如說將“JLabel”寫成了”JLable”則會出現(xiàn)“JLable cannot be resolved to a type”的錯誤。在以后的實驗中還是要多注意字母的大小寫這類小問題,因為代碼總是英文和中文互用,很容易搞混。
2.實驗一還卡在以下錯誤:
①OvalCanvas cannot be resolved to a type(主要是因為“Ovalcanvas”寫成了“O
16、valCanvas”,字母大小寫的問題。
②Syntax error on token "Invalid Character", ; expected。(符號“;”沒有用英文字符“;”的緣故)。
3.對于實驗一,主要是要掌握“主窗體界面應該調(diào)研setOval(int[]x,int[]y,intN)變成畫布類邏輯層”的知識點。難寫的程序是以下部分:
int x,y,r;
try {
x=Integer.parseInt(in_X.getText());
y=Integer.parseInt(in_Y.getText());
r=Integer.parseInt(in_R.getText());
canvas.setOval(x,y,r);
canvas.repaint();
}
catch(NumberFormatException ee) {
x=0;y=0;r=0;
}
4.其實這個實驗我是在參考老師云課堂PPT才寫出來的。在做該實驗的過程中,犯了很多不應該犯的低級錯誤,特別是英文字母的大小寫及中英式字符的運用這些低級錯誤,在以后的實驗中,我要更加注意這方面的問題。