package yan.wen.test;

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


public class DraggedTest extends JFrame {

    private final JPanel panel_1;
    private final JPanel panel_2;
    private final JPanel panel_3;
    private final JPanel panel_4;
    private JPanel contentPane;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    DraggedTest frame = new DraggedTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public DraggedTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(660, 500);
        setLocationRelativeTo(null);
        contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout());
        add(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setBorder(BorderFactory.createLineBorder(Color.orange, 2));
        panel.setLayout(null);

        panel_1 = new JPanel();
        panel_1.setBackground(Color.GRAY);
        panel_1.setBounds(82, 85, 130, 130);
        panel.add(panel_1);

        panel_2 = new JPanel();
        panel_2.setBackground(Color.LIGHT_GRAY);
        panel_2.setBounds(261, 85, 130, 130);
        panel.add(panel_2);

        panel_3 = new JPanel();
        panel_3.setBackground(Color.MAGENTA);
        panel_3.setBounds(450, 85, 130, 130);
        panel.add(panel_3);

        panel_4 = new JPanel();
        panel_4.setBackground(Color.ORANGE);
        panel_4.setBounds(261, 285, 130, 130);
        panel.add(panel_4);

        MyListener m = new MyListener();
        panel_1.addMouseListener(m);
        panel_1.addMouseMotionListener(m);

        panel_2.addMouseListener(m);
        panel_2.addMouseMotionListener(m);

        panel_3.addMouseListener(m);
        panel_3.addMouseMotionListener(m);

        panel_4.addMouseListener(m);
        panel_4.addMouseMotionListener(m);
    }
    // 写一个类继承鼠标监听器的适配器,这样就可以免掉不用的方法。
    class MyListener extends MouseAdapter{
        //这两组x和y为鼠标点下时在屏幕的位置和拖动时所在的位置
        int newX,newY,oldX,oldY;
        //这两个坐标为组件当前的坐标
        int startX,startY;

        @Override
        public void mousePressed(MouseEvent e) {
            //此为得到事件源组件
            Component cp = (Component)e.getSource();
            //当鼠标点下的时候记录组件当前的坐标与鼠标当前在屏幕的位置
            startX = cp.getX();
            startY = cp.getY();
            oldX = e.getXOnScreen();
            oldY = e.getYOnScreen();
        }
        @Override
        public void mouseDragged(MouseEvent e) {
            Component cp = (Component)e.getSource();
            //拖动的时候记录新坐标
            newX = e.getXOnScreen();
            newY = e.getYOnScreen();
            //设置bounds,将点下时记录的组件开始坐标与鼠标拖动的距离相加
            cp.setBounds(startX+(newX - oldX), startY+(newY - oldY), cp.getWidth(), cp.getHeight());
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            Component cp = (Component)e.getSource();
            newX = e.getXOnScreen();
            newY = e.getYOnScreen();
            int x = cp.getX();
            int y = cp.getY();
            if (x < 0){
                x = 0+1;
            }
            if (y < 0){
                y = 0+1;
            }
            if (x > getWidth()-cp.getWidth()){
                x = getWidth()-cp.getWidth();
            }
            if (y > getHeight()-cp.getHeight()){
                y = getHeight()-cp.getHeight();
            }
            if (x != cp.getX() || y != cp.getY()){
                cp.setBounds(x, y, cp.getWidth(), cp.getHeight());
            }
        }
    }
}
最近下载更多
微信网友_6443749026975744  LV1 2023年4月22日
cjjjyy  LV1 2023年3月3日
ezio_ding  LV1 2022年11月1日
wadadd  LV7 2022年9月13日
lizhenlinok  LV10 2021年1月22日
黑衫大魔王  LV1 2019年12月12日
765933786  LV1 2019年6月4日
天大地大我最大  LV2 2019年1月13日
339238137  LV1 2018年12月28日
最代码官方  LV168 2018年8月9日
最近浏览更多
woldxy  LV12 4月1日
yangxb2  LV10 2023年10月20日
微信网友_6443749026975744  LV1 2023年4月22日
xingxing1234  LV10 2023年3月22日
cjjjyy  LV1 2023年3月3日
ezio_ding  LV1 2022年11月1日
lingtiejing  LV15 2022年10月30日
wadadd  LV7 2022年9月13日
liys1234  LV9 2022年4月22日
wyx065747  LV67 2022年3月9日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友