功能综述复习、巩固Java 语言的基础知识进一步加深对Java 语言的理解和掌握课程设计为学生提供了一个既动手又动脑、独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力,培养学生在项目开发中团队合作精神、创新意识及能力。
实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小可在程序中设定)。
(一) 分析与设计说明 本学期对于java 语言的学习,本程序运用图形界面和绘图功能,均已学过利用Eclipse 工具,采用java 语言解决问题。
运行程序,输入图形类型,并输入两个坐标参数(不超过界面的大小),再选择程序界面上方相应所需的菜单选项或下方的按钮,得到所需图形,完成功能的实现。
用菜单和按钮控制绘图程序设置图形参数 菜单绘制图形 按钮绘制图形直线空心椭圆实心椭圆 空心矩形 实心矩形多边形主菜单多边形 椭圆矩形直线 直线多边形空心椭圆实心椭圆 空心矩形实心矩形(二)代码分析/图形界面的实现(图形界面包括2个标签,4个菜单,6个按钮,5个文本组件)//导入程序所需要的包import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Draw extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L;private static final int WIDTH=600;private static final int HEIGHT=600;JMenuBar menubar;JMenu menu1,menu2,menu3,menu4;JMenuItem item1,item2,item3,item4,item5,item6;JButton button1,button2,button3,button4,button5,button6;JLabel label1;Mypanel pane1=new Mypanel();DrawCanvas JD=null;//将图形界面设为名为“控制绘图”且长宽都为600的图形界面。
public Draw(){super("控制绘图");setSize(WIDTH,HEIGHT);Container c=getContentPane();JD=new DrawCanvas();JPanel pane2=new JPanel();Compent(c, pane2);}private void Compent(Container c, JPanel pane2) {menubar=new JMenuBar();menu1=new JMenu("直线");menu2=new JMenu("椭圆");menu3=new JMenu("矩形");menu4=new JMenu("多边形");item1=new JMenuItem("直线");item2=new JMenuItem("空心椭圆");item3=new JMenuItem("实心椭圆");item4=new JMenuItem("空心矩形");item5=new JMenuItem("实心矩形");item6=new JMenuItem("多边形");item1.addActionListener(this);item2.addActionListener(this);item3.addActionListener(this);item4.addActionListener(this);item5.addActionListener(this);item6.addActionListener(this);label1=new JLabel("");menu1.add(item1);menu2.add(item2);menu2.addSeparator();menu2.add(item3);menu3.add(item4);menu3.addSeparator();menu3.add(item5);menu4.add(item6);menubar.add(menu1);menubar.add(menu2);menubar.add(menu3);menubar.add(menu4);setJMenuBar(menubar);button1=new JButton("直线");button2=new JButton("空心椭圆");button3=new JButton("实心椭圆");button4=new JButton("空心矩形");button5=new JButton("实心矩形");button6=new JButton("多边形");pane2.add(button1);pane2.add(button2);pane2.add(button4);pane2.add(button6);pane2.add(label1);pane2.add(button3);pane2.add(button5);button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);button6.addActionListener(this);c.add(pane1,BorderLayout.NORTH);c.add(pane2,BorderLayout.SOUTH);c.add(JD,BorderLayout.CENTER);pane2.setLayout(new GridLayout(2,5,20,10));}/*Draw继承了JFrame,因此可以显示,首先声明标签、菜单、按钮和一个JFrame窗口。
然后通过构建标签、菜单、按钮菜单项添加到菜单中。
标签、菜单、按钮添加到窗口容器中,设置容器的大小及添加按钮和菜单事件监听者。
*//*处理事件监听器事件*/public void actionPerformed(ActionEvent e) {int x1,y1,x2,y2;x1=Integer.parseInt(pane1.getA().getText());y1=Integer.parseInt(pane1.getB().getText());x2=Integer.parseInt(pane1.getC().getText());y2=Integer.parseInt(pane1.getD().getText());int x3[]={280,120,50,90,210,280};int x4[]={20,50,100,110,70,20};int n=5;//当监听器监听到鼠标点击菜单项实心椭圆时,绘制实心椭圆图形else if(e.getSource()==item3){if(JD!=null) {JD.setLine(0);JD.setOval(0);JD.setfillOval(1);JD.setRect(0);JD.setfillRect(0);JD.setPolygon(0);JD.setPosition(x1,y1,x2,y2);JD.repaint();}}//当监听器监听到鼠标点击菜单项直线时,绘制直线图形//当监听器监听到鼠标点击菜单项空心椭圆时,绘制空心椭圆图形//当监听器监听到鼠标点击菜单项空心矩形时,绘制空心矩形图形//当监听器监听到鼠标点击菜单项实心矩形时,绘制实心矩形图形//当监听器监听到鼠标点击菜单项多边形时,绘制多边形图形//当监听器监听到鼠标点击按钮直线时,绘制直线图形if(e.getSource()==button1){if(JD!=null) {JD.setLine(1);JD.setOval(0);JD.setfillOval(0);JD.setRect(0);JD.setfillRect(0);JD.setPolygon(0);JD.setPosition(x1,y1,x2,y2);JD.repaint();}}//当监听器监听到鼠标点击按钮空心椭圆时,绘制空心椭圆图形//当监听器监听到鼠标点击按钮实心椭圆时,绘制实心椭圆图形//当监听器监听到鼠标点击按钮空心矩形时,绘制空心矩形图形//当监听器监听到鼠标点击按钮实心矩形时,绘制实心矩形图形//当监听器监听到鼠标点击按钮多边形时,绘制多边形图形//3.主函数的实现://在主函数中创建了一个jf窗口用于产生图形界面。
设置其可见和大小不可改变属性 public static void main(String []args){JFrame jf=new Draw();jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setResizable(false);jf.setVisible(true);}}//图形绘制的实现//导入该程序所需要的包import java.awt.*;import javax.swing.*;//DrawCanvas实现图形的绘制(直线空心椭圆实心椭圆空心矩形实心矩形多边形)。
public class DrawCanvas extends JPanel{private static final long serialVersionUID = 1L;int x1,y1,x2,y2;int line,oval,filloval,rect,fillrect,polygon;int x3[],x4[],n;public void setPosition(int x1,int y1,int x2,int y2){this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;}public void setPolPosition(int x3[],int x4[],int n){this.x3=x3;this.x4=x4;this.n=n;}public void setLine(int line){this.line=line;}public void setOval(int oval){this.oval=oval;}public void setfillOval(int filloval){this.filloval=filloval;}public void setRect(int rect){this.rect=rect;}public void setfillRect(int fillrect){this.fillrect=fillrect;}public void setPolygon(int polygon){this.polygon=polygon;}public void paintComponent(Graphics g){g.setColor(getBackground());g.fillRect(0,0,this.getWidth(),this.getHeight());g.setColor(Color.black);if(line==1){g.drawLine(x1,y1,x2,y2);}else if(oval==1){g.drawOval(x1, y1, x2, y2);}else if(filloval==1){g.fillOval(x1,y1,x2,y2);}else if(rect==1){g.drawRect(x1, y1, x2, y2);}else if(fillrect==1){g.fillRect(x1,y1,x2,y2);}else if(polygon==1){g.drawPolygon(x3,x4,n);}}}//设置参数的实现//导入程序所需的包import java.awt.*;import javax.swing.*;//Mypanel类中声明了标签并使得通过创建该类的实例将其添加到图形界面中public class Mypanel extends JPanel {private static final long serialVersionUID = 1L;Label label1,label2,label3,label4;TextField a,b,c,d,x;Mypanel(){label2=new Label("请输入:");label1=new Label("参数");/*参数最大可设置4位不过上面的图像界面中设置的大小为600600。