美文网首页
java不规则窗体

java不规则窗体

作者: 王某某的笔记 | 来源:发表于2019-09-18 20:11 被阅读0次

    用背景透明的png图片

    不规则窗体

    不规则窗体

    package com.wwh.excel.tools.swing;
    
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Point;
    import java.awt.Toolkit;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.dnd.DnDConstants;
    import java.awt.dnd.DropTarget;
    import java.awt.dnd.DropTargetAdapter;
    import java.awt.dnd.DropTargetDropEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.io.File;
    import java.util.List;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    
    import com.wwh.excel.tools.worker.Csv2Xls;
    
    public class ImageFrame extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private ImageIcon icon;
        private Point origin = new Point();; // 用于移动窗体
    
        // 小弹出框
        private PopupDialog popupDialog;
    
        public ImageFrame(ImageIcon icon2) {
            this.icon = icon2;
            JLabel imageLabel = new JLabel() {
                private static final long serialVersionUID = 1L;
    
                @Override
                public void paint(Graphics g) {
                    super.paint(g);
                    icon.paintIcon(this, g, 0, 0);
                }
            };
            this.add(imageLabel);
    
            this.setUndecorated(true); // 关键语句1 不启用窗体装饰
    
            this.setSize(icon.getIconWidth(), icon.getIconHeight()); // 设置窗口大小
    
            // 这个需要包的支持
            // AWTUtilities.setWindowOpaque(this, false);
    
            // JDK 1.7 版本以上,使用 this.setBackground(new Color(0, 0, 0, 0));
            this.setBackground(new Color(0, 0, 0, 0)); // 关键句2
    
            // 设置透明度
            this.setOpacity(0.9f);
    
            this.setLocationRelativeTo(null); // 设置窗口居中
            // setVisible(true);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // 鼠标事件监听
            // 由于取消了默认的窗体结构,所以我们要手动设置一下移动窗体的方法
            this.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    origin.x = e.getX();
                    origin.y = e.getY();
                }
    
                // 窗体上单击鼠标右键关闭程序
                public void mouseClicked(MouseEvent e) {
    
                    if (e.getButton() == MouseEvent.BUTTON3) {
                        System.exit(0);
                    } else {
                        if (popupDialog != null) {
                            popupDialog.showDelayHide();
                        }
                    }
                }
    
            });
    
            this.addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseDragged(MouseEvent e) {
                    Point p = getLocation();
                    setLocation(p.x + e.getX() - origin.x, p.y + e.getY() - origin.y);
                }
            });
            drag(imageLabel);
    
            // 设置窗口图标
            Image img2 = Toolkit.getDefaultToolkit().getImage(ImageFrame.class.getResource("/icon.png"));
            setIconImage(img2);
        }
    
        // 定义的拖拽方法
        public void drag(Component c) {
            // c 表示要接受拖拽的控件
            new DropTarget(c, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() {
                @Override
                public void drop(DropTargetDropEvent dtde)// 重写适配器的drop方法
                {
                    try {
                        if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor))// 如果拖入的文件格式受支持
                        {
                            dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);// 接收拖拽来的数据
    
                            @SuppressWarnings("unchecked")
                            List<File> list = (List<File>) (dtde.getTransferable()
                                    .getTransferData(DataFlavor.javaFileListFlavor));
    
                            if (list.size() > 1) {
                                JOptionPane.showMessageDialog(null, "一次拖一个文件,靓仔");
                                return;
                            }
    
                            Csv2Xls.convert(list.get(0));
    
                            popupDialog.showDelayHide();
    
                            dtde.dropComplete(true);// 指示拖拽操作已完成
    
                        } else {
                            dtde.rejectDrop();// 否则拒绝拖拽来的数据
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        JOptionPane.showMessageDialog(null, "出错了,靓仔\n" + e.getMessage());
                    }
                }
            });
        }
    
        public PopupDialog getPopupDialog() {
            return popupDialog;
        }
    
        public void setPopupDialog(PopupDialog popupDialog) {
            this.popupDialog = popupDialog;
        }
    
    }
    
    

    不规则弹出框

    package com.wwh.excel.tools.swing;
    
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.ImageIcon;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.Timer;
    
    public class PopupDialog extends JDialog {
    
        private static final long serialVersionUID = 1L;
    
        private ImageIcon icon;
    
        private Frame owner;
    
        private Timer timer;
    
        private void initTimer(int delayTime) {
            // 定时消失
            ActionListener taskPerformer = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    setVisible(false);
                }
            };
            timer = new Timer(delayTime, taskPerformer);
            timer.setRepeats(false);
        }
    
        /**
         * Create the dialog.
         */
        public PopupDialog(Frame owner, ImageIcon icon2, int delayTime) {
            super(owner);
            this.icon = icon2;
            this.owner = owner;
    
            initTimer(delayTime);
    
            JLabel imageLabel = new JLabel() {
                private static final long serialVersionUID = 1L;
    
                @Override
                public void paint(Graphics g) {
                    super.paint(g);
                    icon.paintIcon(this, g, 0, 0);
                }
            };
    
            this.add(imageLabel);
    
            this.setUndecorated(true); // 关键语句1 不启用窗体装饰
    
            this.setSize(icon.getIconWidth(), icon.getIconHeight()); // 设置窗口大小
    
            // 这个需要包的支持
            // AWTUtilities.setWindowOpaque(this, false);
    
            // JDK 1.7 版本以上,使用 this.setBackground(new Color(0, 0, 0, 0));
            this.setBackground(new Color(0, 0, 0, 0)); // 关键句2
    
            this.setLocationRelativeTo(owner);
    
            this.setDefaultCloseOperation(HIDE_ON_CLOSE);
    
            this.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
    
                    PopupDialog.this.setVisible(false);
    
                }
            });
        }
    
        /**
         * 先显示再延期隐藏
         */
        public void showDelayHide() {
            this.setLocationRelativeTo(owner);
            setVisible(true);
            timer.start();
        }
    
        @Override
        public void setVisible(boolean b) {
            super.setVisible(b);
            if (!b) {
                timer.stop();
            }
        }
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            try {
                ImageIcon icon = new ImageIcon(PopupDialog.class.getResource("/images/success.png"));
                PopupDialog dialog = new PopupDialog(null, icon, 10000);
                dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                // dialog.setVisible(true);
                dialog.showDelayHide();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:java不规则窗体

          本文链接:https://www.haomeiwen.com/subject/fbefyctx.html