Java GUI模拟画图

主函数:程序的入口:

package guidemo;

public class Demo {

    public static void main(String[] args) {

        GuiWindow gwin = new GuiWindow();
        gwin.init();

    }

}

窗口:JFrame:

package guidemo;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

public class GuiWindow extends JFrame {
    private int w = 400;
    private int h = 350;

    Cav cav = new Cav();

    public void init(){
        setTitle("Gui手绘");
        setSize(w,h);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        cav.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if(e.isPopupTrigger()){
                    cav.getJpm().show(cav,e.getX(),e.getY());
                }
                cav.setPreX(-1);
                cav.setPreY(-1);
            }

        });
        System.out.println(cav.getPreX());
        System.out.println(cav.getPreY());

        cav.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                if(cav.getPreX()>0 && cav.getPreY()>0) {
                    cav.getG().setColor(cav.getThis_color());
                    cav.getG().drawLine(cav.getPreX(), cav.getPreY(), e.getX(), e.getY());
//                    System.out.println("yes");
                }
                cav.setPreX(e.getX());
                cav.setPreY(e.getY());

                cav.repaint();
            }
        });

        add(cav);
        setPreferredSize(new Dimension(400,350));
        pack();

        setVisible(true);

    }

}

 画布:Canvas:

package guidemo;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

public class Cav extends Canvas {

    PopupMenu jpm = new PopupMenu();
    MenuItem mi1 = new MenuItem("红色");
    MenuItem mi2 = new MenuItem("蓝色");
    MenuItem mi3 = new MenuItem("绿色");
    private Color this_color = Color.BLACK;
    private int preX = -1;
    private int preY = -1;

    public int getPreX() {
        return preX;
    }

    public int getPreY() {
        return preY;
    }

    public void setPreX(int preX) {
        this.preX = preX;
    }

    public void setPreY(int preY) {
        this.preY = preY;
    }

    public Color getThis_color() {
        return this_color;
    }

    public Graphics getG() {
        return g;
    }

    BufferedImage bufferedImage = new BufferedImage(400, 350, BufferedImage.TYPE_3BYTE_BGR);

    Graphics g = bufferedImage.getGraphics();

    public PopupMenu getJpm() {
        return jpm;
    }

    @Override
    public void paint(Graphics g) {
        g.drawImage(bufferedImage,0,0,null);
    }

    public Cav(){
        jpm.add(mi1);
        jpm.add(mi2);
        jpm.add(mi3);
        add(jpm);

        ActionListener act = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String actionCommand = e.getActionCommand();

                switch (actionCommand){
                    case "红色":
                        this_color = Color.red;
                        System.out.println("red");
                        break;
                    case "蓝色":
                        this_color = Color.blue;
                        System.out.println("blue");
                        break;
                    case "绿色":
                        this_color = Color.green;
                        System.out.println("green");
                        break;
                }
            }
        };

        mi1.addActionListener(act);
        mi2.addActionListener(act);
        mi3.addActionListener(act);

        g.setColor(Color.white);
        g.fillRect(0,0,400,350);

    }

}

最终效果:

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值