JAVA课程设计凸多边形绘图器Word格式.docx
《JAVA课程设计凸多边形绘图器Word格式.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计凸多边形绘图器Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
1、功能
编写一个展示凸多边形性质的程序,提供输入点的端口,提供显示点排列后顺序的文本框、提供显示凸多边形面积与周长的文本行,提供显示凸多边形形状的画板.
2、如何实现
编写一个PolygonJFrame类用来显示框架和响应各类单击事件.
编写一个PolygonCanvas类用来根据条件绘图.
四、源程序清单
PolygonJFrame类
importjava.awt.Dimension。
importjava.awt.GridLayout。
importjava.awt.event.ActionEvent。
importjava.awt.event.ActionListener。
importjavax.swing.JButton。
importjavax.swing.JCheckBox。
importjavax.swing.JFrame。
importjavax.swing.JOptionPane。
importjavax.swing.JPanel。
importjavax.swing.JScrollPane。
importjavax.swing.JTextArea。
importjavax.swing.JTextField。
publicclassPolygonJFrameextendsJFrameimplementsActionListener{
privatePolygonCanvaspcs。
//多边形画板
privateJButtondrawbutton,naturebutton。
//画图、清理按钮
privateJTextFieldaddpoint,showpolygon。
//输入点、和现实多边形性质的文本行
privateJTextAreashowpoints。
//显示每个点的信息
privateJCheckBoxArea,perimeter。
//选择显示的信息
privatepointp[]=newpoint[100]。
privateintnum=0。
privateJPanelpanel=newJPanel(newGridLayout(1,3))。
publicdoubleAreamessage,perimetermessage。
publicbooleannf=true。
//默认可以构成凸多边形
publicPolygonJFrame()
{
super("
凸多边形"
)。
Dimensiondim=getToolkit().getScreenSize()。
//获得屏幕分辨率(屏幕分辨率是个对象)
this.setBounds(dim.width/3,dim.height/3,dim.width/3,dim.height/3)。
//窗口居中
this.setDefaultCloseOperation(EXIT_ON_CLOSE)。
//窗口关闭,程序结束
JPanelpanelEdti=newJPanel(newGridLayout(5,1))。
panel.add(panelEdti,0)。
addpoint=newJTextField("
点的输入格式为(XXXX,XXXX)"
addpoint.addActionListener(this)。
//文本框响应单击事件
panelEdti.add(addpoint)。
Area=newJCheckBox("
面积"
perimeter=newJCheckBox("
周长"
JPanelselected=newJPanel()。
//将两个复选按钮加入同一面板
selected.add(Area)。
selected.add(perimeter)。
panelEdti.add(selected)。
showpolygon=newJTextField("
属性"
showpolygon.setEditable(false)。
//属性行不能编辑
panelEdti.add(showpolygon)。
drawbutton=newJButton("
绘图"
drawbutton.addActionListener(this)。
panelEdti.add(drawbutton)。
naturebutton=newJButton("
naturebutton.addActionListener(this)。
panelEdti.add(naturebutton)。
showpoints=newJTextArea()。
JScrollPanejsp=newJScrollPane(showpoints)。
panel.add(jsp,1)。
this.getContentPane().add(panel)。
point[]temp=newpoint[1]。
temp[0]=newpoint(0,0)。
pcs=newPolygonCanvas(temp,nf)。
//面板初始化为x轴y轴和原点(0,0)
panel.add(pcs)。
this.setVisible(true)。
}
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
if(e.getSource()==addpoint)//响应点编辑文本框
try
{
if(addpoint.getText().length()!
=11)//处理文本框上的数据
thrownewException("
第"
+(num+1)+"
点的输入格式错误,请按格式输入!
"
intx=Integer.parseInt(addpoint.getText().substring(1,5))。
inty=Integer.parseInt(addpoint.getText().substring(6,10))。
p[num++]=newpoint(x,y)。
//将处理后的点放入数组p中
showpoints.append("
+num+"
个点"
+p[num-1]+"
\n"
}
catch(Exceptionf)//若输入格式不正确则抛出异常,相当于没输入
JOptionPane.showMessageDialog(drawbutton,f.toString())。
if(e.getSource()==drawbutton)//若按绘图按钮
if(nf)
point[]realp=newpoint[num]。
for(inti=0。
i<
num。
i++)
realp[i]=p[i]。
Polygonpolygon。
polygon=newPolygon(realp)。
Areamessage=polygon.area()。
perimetermessage=polygon.perimeter()。
pcs.set(polygon.p,nf)。
pcs.repaint()。
排序后的点如下:
+"
for(inti=0。
polygon.p.length&
&
polygon.p[i]!
=null。
showpoints.append("
+(i+1)+"
+polygon.p[i]+"
nf=false。
}//若不能构成凸多边形则Polygon构造函数抛出异常
catch(PolygonExceptionf)//捕捉异常只画点
nf=false。
pcs.set(realp,nf)。
pcs.repaint()。
JOptionPane.showMessageDialog(drawbutton,f.toString()+"
图中蓝点即为所给点"
else//若已经画过图就抛出对话框
{
inti=JOptionPane.showConfirmDialog(showpolygon,"
是否重新绘图!
if(i==0)//选择确定就重画
nf=true。
point[]temp=newpoint[1]。
temp[0]=newpoint(0,0)。
pcs.set(temp,false)。
num=0。
JOptionPane.showMessageDialog(showpoints,"
请重新输入点"
}//否则直接退出程序
else
System.exit(0)。
}
if(e.getSource()==naturebutton)//选择属性按钮
if(Areamessage!
=0.0)
showpolygon.setText("
if(Area.isSelected())
showpolygon.setText("
面积:
+Areamessage)。
if(perimeter.isSelected())
showpolygon.setText(showpolygon.getText()+"
+perimetermessage)。
else
JOptionPane.showMessageDialog(showpolygon,"
必须先绘图!
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
newPolygonJFrame()。
PolygonCanvas类
importjava.awt.Canvas。
importjava.awt.