广东自考JAVA语言程序设计一课后习题答案和源代码第七章.docx
《广东自考JAVA语言程序设计一课后习题答案和源代码第七章.docx》由会员分享,可在线阅读,更多相关《广东自考JAVA语言程序设计一课后习题答案和源代码第七章.docx(39页珍藏版)》请在冰豆网上搜索。
![广东自考JAVA语言程序设计一课后习题答案和源代码第七章.docx](https://file1.bdocx.com/fileroot1/2022-11/28/d05eff6c-1144-46a9-9260-e1994148cec9/d05eff6c-1144-46a9-9260-e1994148cec91.gif)
广东自考JAVA语言程序设计一课后习题答案和源代码第七章
第七章1
7.1编写一个应用程序,绘制一个五角星。
1
7.2用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。
3
7.3利用Graphics2D的平移,缩放,旋转功能。
绘制一个六角星。
7
7.4编写画图程序。
10
7.5输入二次曲线的系数,画出二次曲线17
7.6.写音乐播放器,只能播放wav,mid格式的。
24
第七章
7.1编写一个应用程序,绘制一个五角星。
程序运行结果:
源文件:
Work7_1.java
importjava.awt.*;
importjavax.swing.*;
/**
*7.1画一个五角星
*@author黎明你好
*/
publicclassWork7_1
{
publicstaticvoidmain(Stringargs[])
{
JFramewin=newJFrame("第七章,第一题");
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setBounds(50,50,210,250);
win.add(newFiveStarCanvas(100),BorderLayout.CENTER);
win.setVisible(true);
win.validate();
}
}
画板类源文件:
FiveStarCanvas.java
/**
*画板类,在上面画出五角星
*@author黎明你好
*/
classFiveStarCanvasextendsCanvas
{
privatestaticfinallongserialVersionUID=1L;
/**五角星外接圆的半径*/
privateintradius;
/**
*构造方法
*@paramr-初始化外接圆半径
*/
publicFiveStarCanvas(intr)
{
this.radius=r;
}
publicvoidpaint(Graphicsg)
{
intax=radius;intay=0;
intbx=(int)(radius*(1-Math.cos((18*Math.PI)/180)));
intcx=(int)(radius*(1+Math.cos((18*Math.PI)/180)));
intdx=(int)(radius*(1-Math.cos((54*Math.PI)/180)));
intex=(int)(radius*(1+Math.cos((54*Math.PI)/180)));
intby=(int)(radius*(1-Math.sin((18*Math.PI)/180)));
intcy=(int)(radius*(1-Math.sin((18*Math.PI)/180)));
intdy=(int)(radius*(1+Math.sin((54*Math.PI)/180)));
intey=(int)(radius*(1+Math.sin((54*Math.PI)/180)));
g.setColor(Color.RED);
g.drawLine(dx,dy,ax,ay);
g.drawLine(ax,ay,ex,ey);
g.drawLine(ex,ey,bx,by);
g.drawLine(bx,by,cx,cy);
g.drawLine(cx,cy,dx,dy);
g.setColor(Color.BLUE);
g.drawOval(0,0,2*radius,2*radius);
g.drawLine(radius,radius,ax,ay);
g.drawLine(radius,radius,bx,by);
g.drawLine(radius,radius,cx,cy);
g.drawLine(radius,radius,dx,dy);
g.drawLine(radius,radius,ex,ey);
}
}
7.2用Graphics2D绘制一条抛物线,设抛物线方程的系数从图形界面输入。
程序运行结果:
frame源文件:
ParabolaFrame.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
/**
*7.2用Graphics2D画抛物线,抛物线方程的系数从图形界面输入.
*@author黎明你好
*/
publicclassParabolaFrameextendsJFrameimplementsActionListener
{
privatestaticfinallongserialVersionUID=1L;
privateParabolaCanvascanvas;//画出抛物线的花瓣
privateJTextFieldinputA_text,inputB_text,inputC_text;//三个文本框,接收方程系数
privateJButtonconfirm_button;//确定按钮
privateJLabeldisplay_label;
privateJPanelpanel;//布局面板
privatedoublea,b,c;//抛物线三个系数
publicParabolaFrame()
{
super("第七章,第二题");
a=1;
b=0;
c=0;
panel=newJPanel();
canvas=newParabolaCanvas(a,b,c);
inputA_text=newJTextField(""+a,3);
inputB_text=newJTextField(""+b,3);
inputC_text=newJTextField(""+c,3);
confirm_button=newJButton("确定");
display_label=newJLabel();
panel.add(newJLabel("a="));
panel.add(inputA_text);
panel.add(newJLabel("b="));
panel.add(inputB_text);
panel.add(newJLabel("c="));
panel.add(inputC_text);
panel.add(confirm_button);
panel.add(display_label);
confirm_button.addActionListener(this);
inputA_text.addActionListener(this);
inputB_text.addActionListener(this);
inputC_text.addActionListener(this);
setLabel();
this.add(panel,BorderLayout.NORTH);
this.add(canvas,BorderLayout.CENTER);
this.setBounds(50,50,800,600);
this.setVisible(true);
this.validate();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente)
{
try
{
a=Double.parseDouble(inputA_text.getText());
b=Double.parseDouble(inputB_text.getText());
c=Double.parseDouble(inputC_text.getText());
}
catch(NumberFormatExceptionEe)
{
a=0;
b=0;
c=0;
}
canvas.set(a,b,c);
canvas.repaint();
setLabel();
}
publicvoidsetLabel()
{
Stringstr="方程:
y=";
str+=a==0?
"":
(a==1?
"x^2":
a+"x^2");
str+=b==0?
"":
(a==0?
(b==1?
"x":
b+"x"):
(b==1?
"+x":
"+"+b
+"x"));
str+=c==0?
"":
(a==0&&b==0?
c:
"+"+c);
display_label.setText(str);
}
publicstaticvoidmain(Stringargs[])
{
newParabolaFrame();
}
}
画抛物线的画板类:
ParabolaCanvas.java
/**
*画板类,在上面画抛物线
*@author黎明你好
*/
classParabolaCanvasextendsCanvas
{
privatestaticfinallongserialVersionUID=1L;
doublea,b,c;
/**构造方法,抛物线初始状态*/
publicParabolaCanvas(doublea,doubleb,doublec)
{
this.a=a;
this.b=b;
this.c=c;
setBackground(newColor(100,240,240));
}
/**
*设置抛物线系数
*@parama-二次项系数
*@paramb-一次项系数
*@paramc-常数项
*/
publicvoidset(doublea,doubleb,doublec)
{
this.a=a;
this.b=b;
this.c=c;
}
publicvoidpaint(Graphicsg)
{
Graphics2Dg2D=(Graphics2D)g;
//画坐标系
g2D.drawLine(0,300,600,300);//横线
g2D.drawLine(300,0,300,600);//竖线中心坐标300,300
g2D.drawLine(300,0,294,10);
g2D.drawLine(300,0,306,10);//y轴箭头
g2D.drawLine(600,300,590,294);
g2D.drawLine(600,300,590,306);//x轴箭头
g2D.drawLine(200,300,200,308);
g2D.drawString("-5",197,320);
g2D.drawLine(100,300,100,308);
g2D.drawString("-10",97,320);
g2D.drawLine(400,300,400,308);
g2D.drawString("5",397,320);
g2D.drawLine(500,300,500,308);
g2D.drawString("10",497,320);
g2D.drawLine(300,100,307,100);
g2D.drawString("10",310,103);
g2D.drawLine(300,200,307,200);
g2D.drawString("5",310,203);
g2D.drawLine(300,400,307,400);
g2D.drawString("-5",310,403);
g2D.drawLine(300,500,307,500);
g2D.drawString("-10",310,503);
g2D.drawString("0,0",305,318);
g2D.drawString("y轴",310,15);
g2D.drawString("x轴",580,290);
for(inti=0;i<600;i+=20)
{
g2D.drawLine(i,300,i,303);
g2D.drawLine(300,i,303,i);
}
//下面程序为画抛物线
doublex0,y0,x1,y1,x2,y2,scale;
x0=300;
y0=0;
scale=20.0;
g2D.setColor(Color.RED);
for(x1=-15;x1<15;x1+=0.001D)
{
y1=a*x1*x1+b*x1+c;
x2=x0+x1*scale;
y2=y0+y1*scale;
g2D.fillOval((int)x2,300-(int)y2,2,2);
}
}
}
7.3利用Graphics2D的平移,缩放,旋转功能。
绘制一个六角星。
程序运行结果:
源文件:
Work7_3.java
importjava.awt.*;
importjava.awt.geom.*;
importjavax.swing.*;
/**
*7.3利用Graphics2D的平移,缩放,旋转功能。
绘制一个六角星。
*@author黎明你好
*/
publicclassWork7_3extendsJFrame
{
privatestaticfinallongserialVersionUID=1L;
publicWork7_3()
{
super("第七章,第三题");
this.add(newSixStarCanvas(80),BorderLayout.CENTER);
this.setBounds(50,50,400,400);
this.setVisible(true);
this.validate();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicstaticvoidmain(Stringargs[])
{
newWork7_3();
}
}
画六角形的画板类:
SixStarCanvas.java
/**
*画板类,在上面画出六角星
*通过先画一个三角形,然后旋转6次,得到六角形
*@author黎明你好
*/
classSixStarCanvasextendsCanvas
{
privatestaticfinallongserialVersionUID=1L;
/**六角星外接圆的半径*/
privateintradius;
/**一个三角形三个顶点的x点坐标集*/
privateintxPoints[];
/**一个三角形三个顶点的y点坐标集*/
privateintyPoints[];
/**
*构造方法
*@paramr-初始化外接圆半径
*/
publicSixStarCanvas(intr)
{
this.radius=r;
xPoints=newint[]{r,2*r,(int)(3*r/2)};
yPoints=newint[]{r,r,(int)(r-Math.sqrt(3)*r/2)};
}
publicvoidpaint(Graphicsg)
{
Graphics2Dg2D=(Graphics2D)g;
BasicStrokebs=newBasicStroke(1,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_MITER);
g2D.setStroke(bs);
AffineTransformtrans=newAffineTransform();
trans.translate(10,10);//移动
trans.scale(2,2);//放大
for(inti=1;i<=6;i++)
{
trans.rotate(60.0*Math.PI/180,radius,radius);//旋转
g2D.setTransform(trans);
g2D.drawPolygon(xPoints,yPoints,3);
}
}
}
7.4编写画图程序。
程序运行结果:
控制画板的窗口类源文件:
PaintFrame.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
/**
*7.4编写画图程序。
*控制画板的窗口类
*@author黎明你好
*/
publicclassPaintFrameextendsJFrameimplementsItemListener,ActionListener
{
privatestaticfinallongserialVersionUID=1L;
/**画板*/
privatePaintCanvascanvas;
/**画笔端点装饰,无装饰、圆形装饰、方形装饰*/
privateJToggleButtoncap_butt,cap_round,cap_square;
/**橡皮*/
privateJToggleButtoneraser;
/**画笔大小*/
privateJComboBoxwidth_box;
/**选择颜色的按钮*/
privateJButtonselectColor;
/**单选按钮分组*/
privateButtonGroupgroup;
privateJPanelpanel;
privateStringitem[];
privateintstrokeWidth=1,strokeCap=0,strokeJoin=BasicStroke.JOIN_BEVEL;
publicPaintFrame()
{
super("画图小程序");
canvas=newPaintCanvas();
selectColor=newJButton("");
cap_butt=newJToggleButton("标准");
cap_round=newJToggleButton("圆形");
cap_square=newJToggleButton("方形");
eraser=newJToggleButton("橡皮");
panel=newJPanel();
group=newButtonGroup();
item=newString[20];
for(inti=0;i<20;i++)
{
item[i]=""+(i+1);
}
width_box=newJComboBox(item);
width_box.setEditable(true);//组合框可以输入
cap_butt.setSelected(true);//笔形,标准为开始默认
canvas.setPenColor(Color.BLACK);
selectColor.setBackground(Color.BLACK);//画笔颜色,开始为黑色
//添加监控
width_box.addItemListener(this);
width_box.addActionListener(this);
selectColor.addActionListener(this);
cap_butt.addItemListener(this);
cap_round.addItemListener(this);
cap_square.addItemListener(this);
eraser.addItemListener(this);
//画笔形式单选按钮
group.add(cap_butt);
group.add(cap_round);
group.add(cap_square);
group.add(eraser);
//添加按钮
panel.setLayout(newFlowLayout());
panel.setBorder(BorderFactory.createTitledBorder("设置区"));
panel.add(newJLabel("笔形:
"));
panel.add(ca