1、java课设用菜单按钮控制绘图功能综述 复习、巩固Java语言的基础知识 进一步加深对Java语言的理解和掌握课程设计为学生提供了一个既动手又动脑、独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力,培养学生在项目开发中团队合作精神、创新意识及能力。 实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小可在程序中设定)。(一) 分析与设计说明 本学期对于java语言的学习,本程序运用图形界面和绘图功能,均已学过利用Eclipse工具,采用java语言解决问题。 运行程序,输入图
2、形类型,并输入两个坐标参数(不超过界面的大小),再选择程序界面上方相应所需的菜单选项或下方的按钮,得到所需图形,完成功能的实现。(二) 代码分析 /图形界面的实现(图形界面包括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; privat
3、e 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;/将图形界面设为名为“控制绘图”且
4、长宽都为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(矩形); menu
5、4=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);
6、 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); menu
7、bar.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); pane
8、2.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);
9、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().getTex
10、t(); 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.setOva
11、l(0); JD.setfillOval(1); JD.setRect(0); JD.setfillRect(0); JD.setPolygon(0); JD.setPosition(x1,y1,x2,y2); JD.repaint(); /当监听器监听到鼠标点击菜单项直线时,绘制直线图形/当监听器监听到鼠标点击菜单项空心椭圆时,绘制空心椭圆图形/当监听器监听到鼠标点击菜单项空心矩形时,绘制空心矩形图形/当监听器监听到鼠标点击菜单项实心矩形时,绘制实心矩形图形/当监听器监听到鼠标点击菜单项多边形时,绘制多边形图形/当监听器监听到鼠标点击按钮直线时,绘制直线图形 if(e.getSource()
12、=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(); /当监听器监听到鼠标点击按钮空心椭圆时,绘制空心椭圆图形/当监听器监听到鼠标点击按钮实心椭圆时,绘制实心椭圆图形/当监听器监听到鼠标点击按钮空心矩形时,绘制空心矩形图形/当监听器监听到鼠标点击按钮实心矩形时,绘制实心矩形图形/当监听器监听到鼠标点击按钮多边形时,绘制
13、多边形图形/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实现图形的绘制(直线 空心椭圆 实心椭
14、圆 空心矩形 实心矩形 多边形)。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 setPol
15、Position(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
16、) 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,
17、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 ex
18、tends 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位 不过上面的图像界面中设置的大小为600 600。故此设置的大小不应该超过600 600 600 600。*/ x=new TextField(4); a=new TextField(4); b=new TextField(4)
19、; c=new TextField(4); d=new TextField(4); add(label2); add(x); add(label1); add(a); add(b); add(c); add(d); public TextField getA() return a; public void setA(TextField a) this.a = a; public TextField getB() return b; public void setB(TextField b) this.b = b; public TextField getC() return c; public
20、 void setC(TextField c) this.c = c; public TextField getD() return d; public void setD(TextField d) this.d = d; /*应该注意的是,多边形的参数是数组型给出,故为了简便,程序中已经设置好多变形的参数,不论输入的参数是什么,显示的还是代码中已经设置好的参数的那个多边形。参数一二位为图形起点位置坐标,三四位位图形终点坐标 分别为图形的左上角和右下角。*/(三) 运行结果例一:输入“直线”和参数,选择直线菜单项,绘制图线为直线。例二:输入“空心椭圆”和参数,选择下方空心椭圆按钮,绘制图形为空
21、心椭圆。例三:输入“实心矩形”和参数,选择下方实心矩形按钮,绘制图形为实心矩形。例四:输入“多边形”和参数,选择多边形菜单项,绘制图形为多边形。 结果分析: 1、当输入“直线”,并输入起始两点坐标参数,点击直线菜单项或直线按钮时, 绘制图形为直线。 2、当输入“空心椭圆”,并输入两点坐标参数,点击空心椭圆菜单项或空心椭圆按钮时,绘制图形为空心椭圆。 3、当输入“实心椭圆”,并输入两点坐标参数,点击实心椭圆菜单项或实心椭圆时按钮,绘制图形为实心椭圆。 4、当输入“空心矩形”,并输入对角线两点坐标参数,点击空心矩形菜单项或空心矩形按钮时,绘制图形为空心矩形。 5、当输入“实心矩形”,并输入对角线两
22、点坐标参数,点击实心矩形菜单项或实心矩形按钮时,绘制图形为实心矩形。 6、当输入“多边形”,并输入两点坐标参数,点击多边形菜单项或多边形按钮 时,绘制图形为多边形。(四) 附录 附录一: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=60
23、0; 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
24、的图形界面。 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(矩
25、形); menu4=new JMenu(多边形); /构造一个新 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(th
26、is); 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); menub
27、ar.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); pane
28、2.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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1