画板部分监听事件的实现

图形绘制实现
简单直线绘制:
界面:JFrame
监听器:MouseListener
画笔类:Graphics 特殊:主要用于绘制图形功能
对象必须从指定的容器组件上获取

画板代码

public class Text {
    public static void main(String[] args) {
        DrowFrame df=new DrowFrame();
        df.initFrame();
    }
}
public class DrowFrame extends JFrame{

    public void initFrame() {       
        this.setSize(1040,677);
        this.setDefaultCloseOperation(3);
        this.setLocationRelativeTo(null);
        this.setTitle("画图");
        //this.setIconImage(getIconImage());
        //给窗体的左边、下边、中间分别添加中间容器层容器组件JPanel
        JPanel panelLeft=new JPanel();
        JPanel panelDown=new JPanel();
        JPanel panelCenter=new JPanel();
        //颜色
        Color color=new Color(240,240,240);
        panelLeft.setBackground(color);
        //大小
        Dimension dimen=new Dimension(70,55);
        panelLeft.setPreferredSize(dimen);
        panelDown.setPreferredSize(dimen);
        this.add(panelLeft,BorderLayout.WEST);
        this.add(panelDown,BorderLayout.SOUTH);
        this.add(panelCenter);
        /*********************添加左部图案区***********************************/
        panelLeft.setLayout(new FlowLayout(1,0,0));
        panelLeft.setBorder(new BevelBorder(0,color.white,color.gray));
        ButtonGroup bg=new ButtonGroup();
        for(int i=0;i<16;i++) {
            JRadioButton jrb=new JRadioButton();
            jrb.setActionCommand("pic"+i);
            jrb.setBorder(null);
            jrb.setIcon(new ImageIcon("Images/draw"+i+".jpg"));
            jrb.setRolloverIcon(new ImageIcon("Images/draw"+i+"-1.jpg"));
            jrb.setPressedIcon(new ImageIcon("Images/draw"+i+"-2.jpg"));
            jrb.setSelectedIcon(new ImageIcon("Images/draw"+i+"-3.jpg"));
            bg.add(jrb);
            panelLeft.add(jrb);
        }
        JPanel pane=new JPanel();
        pane.setPreferredSize(new Dimension(35,70));
        pane.setBorder(new BevelBorder(1,color.white,color.gray));
        panelLeft.add(pane);


        /*********************添加底部颜色区***********************************/
        panelDown.setBorder(new BevelBorder(1,color.white,color.gray));
        panelDown.setLayout(new FlowLayout(0,7,5));
        panelDown.setBackground(new Color(240,240,240));
        JPanel panelLeft_1=new JPanel();
        panelLeft_1.setPreferredSize(new Dimension(36, 36));
        panelDown.add(panelLeft_1,BorderLayout.WEST);
        panelLeft_1.setBorder(new BevelBorder(1,color.white,color.gray));
        panelLeft_1.setLayout(null);
        JButton jButton_1=new JButton();
        jButton_1.setBackground(color.black);
        jButton_1.setBounds(7, 7,17, 17);
        jButton_1.setEnabled(false);
        jButton_1.setBorder(new BevelBorder(0,color.white,color.gray));
        panelLeft_1.add(jButton_1);
        JButton jButton_2=new JButton();
        jButton_2.setBackground(color.white);
        jButton_2.setBounds(15,15,17, 17);
        jButton_2.setEnabled(false);
        jButton_2.setBorder(new BevelBorder(0,color.white,color.gray));
        panelLeft_1.add(jButton_2);

        //添加小格颜色        

        JPanel panelColor=new JPanel();
        panelColor.setPreferredSize(new Dimension(280,45));
        panelDown.add(panelColor);
        panelColor.setLayout(new GridLayout(2,14));
        JButton jb[]=new JButton[28];
        for(int i=0;i<28;i++) {
            jb[i]=new JButton();
            jb[i].setPreferredSize(new Dimension(17,17));
            jb[i].setBorder(new BevelBorder(1,color.white,color.gray));
            panelColor.add(jb[i]);
            jb[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JButton button = (JButton)e.getSource();
                    //获取按钮的背景色
                    Color color = button.getBackground();
                    //把颜色设置到前面小按钮上,作为背景色
                    jButton_1.setBackground(color); }
            });         
        }

        jb[0].setBackground(new Color(0, 0, 0));jb[1].setBackground(new Color(128,138,135));
        jb[2].setBackground(new Color(176, 23, 31));jb[3].setBackground(new Color(107,142,35));
        jb[4].setBackground(new Color(34,139,34));jb[5].setBackground(new Color(64,224,205));
        jb[6].setBackground(new Color(8,46, 84));jb[7].setBackground(new Color(160, 32, 240));
        jb[8].setBackground(new Color(210, 180, 140));jb[9].setBackground(new Color(25,25,112));
        jb[10].setBackground(new Color(0,191,255));jb[11].setBackground(new Color(153, 51,250));
        jb[12].setBackground(new Color(160, 82,45));jb[13].setBackground(new Color(120,82,45));
        jb[14].setBackground(new Color(255,255,255));jb[15].setBackground(new Color(192,192,192));
        jb[16].setBackground(new Color(255, 0, 0));jb[17].setBackground(new Color(255, 255, 0));
        jb[18].setBackground(new Color(0, 255, 0));jb[19].setBackground(new Color(0,255,255));
        jb[20].setBackground(new Color( 0, 0,255));jb[21].setBackground(new Color(255,0,255));
        jb[22].setBackground(new Color(255,227,132));jb[23].setBackground(new Color(0,206,209));
        jb[24].setBackground(new Color(175,238,238));jb[25].setBackground(new Color(202,135,216));
        jb[26].setBackground(new Color(116, 0, 0));jb[27].setBackground(new Color(255,125,64));

        //1、菜单条的添加
        JMenuBar bar = new JMenuBar();
        //设置菜单条到窗体上
        this.setJMenuBar(bar);
        //2、菜单添加到菜单条
        JMenu menu_1 = new JMenu("文件(F)");
        JMenu menu_2 = new JMenu("编辑(E)");
        JMenu menu_3 = new JMenu("查看(V)");
        JMenu menu_4 = new JMenu("图像(I)");
        JMenu menu_5 = new JMenu("颜色(C)");
        JMenu menu_6 = new JMenu("帮助(H)");
        bar.add(menu_1);
        bar.add(menu_2);
        bar.add(menu_3);
        bar.add(menu_4);
        bar.add(menu_5);
        bar.add(menu_6);
        //3.菜单上添加菜单项
        JMenuItem item []= {new JMenuItem("新建"),new JMenuItem("打开"),
                new JMenuItem("保存"),new JMenuItem("另存为"),new JMenuItem("打印预览"),new JMenuItem("页面设置"),
                new JMenuItem("打印"),new JMenuItem("发送"),new JMenuItem("退出")};
        for(int i=0;i<9;i++) menu_1.add(item[i]);
        JMenuItem item_1 []= {new JMenuItem("撤销"),new JMenuItem("全选"),
                new JMenuItem("粘贴来源")};
        for(int i=0;i<3;i++) menu_2.add(item_1[i]);
        JMenuItem item_2 []= {new JMenuItem("工具箱"),new JMenuItem("颜料盒"),
                new JMenuItem("状态栏"),new JMenu("缩放"),new JMenuItem("查看位图")};
        JMenuItem item2[]= {new JMenuItem("大尺寸"),new JMenuItem("自定义")};
        for(int i=0;i<2;i++) item_2[3].add(item2[i]);
        for(int i=0;i<5;i++) menu_3.add(item_2[i]);
        JMenuItem item_3 []= {new JMenuItem("翻转/旋转"),new JMenuItem("拉伸/扭曲"),
                new JMenuItem("反色"),new JMenuItem("属性"),new JMenuItem("清除图像"),new JMenuItem("不透明处理")};
        for(int i=0;i<6;i++) menu_4.add(item_3[i]);     
        menu_5.add(new JMenuItem("编辑颜色"));
        JMenuItem item_4[] = {new JMenuItem("帮助主题"),new JMenuItem("关于画图")};
        for(int i=0;i<2;i++) menu_6.add(item_4[i]); 
        //menu_1.add(item);

        /************中间面板设置*********************************************/
        panelCenter.setLayout(new FlowLayout(0,5,5));
        JPanel panelDraw = new JPanel();
        panelDraw.setPreferredSize(new Dimension(940,500));
        panelDraw.setBackground(Color.white);
        panelCenter.add(panelDraw);     

        this.setVisible(true);      

        Graphics g = panelDraw.getGraphics();
        //创建监听器对象
        /*Mouse ms = new Mouse(g);
        panelDraw.addMouseListener(ms);*/
        panelDraw.addMouseListener(new MouseListener() {
            public int x1,y1,x2,y2;
            public String commend;
            public void mousePressed(MouseEvent e) {
                x1=e.getX();
                y1=e.getY();
                ButtonModel bm=bg.getSelection();
                commend=bm.getActionCommand();
                g.setColor(jButton_1.getBackground());
                }
                public void mouseReleased(MouseEvent e) {
                    x2=e.getX();
                    y2=e.getY();
                    //画图形
                    if(commend.equals("pic10")){
                        g.drawLine(x1, y1, x2, y2);
                    }else if(commend.equals("pic12")){
                        g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
                    }else if(commend.equals("pic14")){
                        g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
                    }
                    //g.drawLine(x1,y1, x2, y2);
                    //g.drawRect(Math.min(x1, x2),Math.min(y1, y2),Math.abs(x2-x1), Math.abs(y2-y1));
                    //g.drawOval(Math.min(x1, x2),Math.min(y1, y2),Math.abs(x2-x1), Math.abs(y2-y1));
                    //直角三角形
                    /*g.drawLine(x1, y1, x2, y2);
                    g.drawLine(x1, y2, x2, y2);
                    g.drawLine(x1, y1, x1, y2);*/
                    //等腰三角形
                    /*g.drawLine(x1, y2, x2, y2);
                    g.drawLine((x1+x2)/2, y1, x1, y2);
                    g.drawLine((x1+x2)/2, y1, x2, y2);*/
                        }           
                public void mouseExited(MouseEvent e) {}
                public void mouseEntered(MouseEvent e) {}
                public void mouseClicked(MouseEvent e) {}
        }); 

    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值