Swing无边框 鼠标可拖动

这个Java代码创建了一个可拖动的窗口,并在窗口中添加了两个按钮,分别用于关闭和最小化窗口。窗口的拖动通过监听鼠标按下和拖动事件实现,按钮的图标和行为通过ActionListener进行定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package my;

public class LogANA
{
    // 背景图片bgImage
    private ImageIcon bgImage = new ImageIcon("src/main/images/bg.jpg");
    // 用于处理拖动事件,表示鼠标按下时的坐标,相对于JFrame
    int xOld = 0;
    int yOld = 0;

    private ImageIcon bt1mage = new ImageIcon("src/main/images/mini.png");
    private ImageIcon bt1mage_enable = new ImageIcon("src/main/images/mini_enable.png");
    private ImageIcon bt2mage = new ImageIcon("src/main/images/close.png");
    private ImageIcon bt2mage_enable = new ImageIcon("src/main/images/close_enable.png");



    public LogANA() {

        getContentPane().setLayout(new BorderLayout());
        this.setLocationRelativeTo(null);
        this.setSize(bgImage.getIconWidth(), bgImage.getIconHeight());

        // 处理拖动事件---去掉默认边框后,不能拖动了,具体实现如下
        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                xOld = e.getX();//记录鼠标按下时的坐标
                yOld = e.getY();
            }
        });

        this.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                int xOnScreen = e.getXOnScreen();
                int yOnScreen = e.getYOnScreen();
                int xx = xOnScreen - xOld;
                int yy = yOnScreen - yOld;
                LogANA.this.setLocation(xx, yy);//设置拖拽后,窗口的位置
            }
        });


        JPanel mainPanel = new JPanel();
        mainPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        mainPanel.setSize(bgImage.getIconWidth(), 100);
        mainPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));

        // 关闭按钮
        JButton miniBtn = new MyIconButton(bt1mage, bt1mage_enable, bt1mage, "");
        mainPanel.add(miniBtn);

        // 关闭按钮
        JButton closeBtn = new MyIconButton(bt2mage, bt2mage_enable, bt2mage, "");
        mainPanel.add(closeBtn);


        getContentPane().add(mainPanel, BorderLayout.CENTER);

        closeBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        miniBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setExtendedState(JFrame.ICONIFIED);//最小化窗体
            }
        });

        setUndecorated(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

   public static void main(String[] args) {
       LogANA j = new LogANA();
       j.setVisible(true);
   }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大马猴_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值