Java Swing精美的消息弹窗

直接上效果图:

提醒弹窗:

确认弹窗:

java源码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;

public class BeautifulPopup extends JFrame{

    private int mouseX, mouseY;
    public BeautifulPopup(int fontSize, String msg) {
        // 事件监听器
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                mouseX = e.getX();
                mouseY = e.getY();
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                // 计算窗口的新位置
                int x = e.getXOnScreen() - mouseX;
                int y = e.getYOnScreen() - mouseY;
                setLocation(x, y);
            }
        });


        Icon warningIcon = UIManager.getIcon("OptionPane.warningIcon");

        Color color = new Color(248, 255, 98, 180);// 黑色背景,透明度为50的color;透明的取值范围0~255
        setAlwaysOnTop(true);//设置窗口置顶
        setUndecorated(true);// 设置无边框
        setBackground(color);// 设置背景色


        JButton confirmBtn = new JButton("确认");
        confirmBtn.setBackground(new Color(38, 179, 93, 240));
        confirmBtn.setForeground(Color.black);
        confirmBtn.setBorder(null);
        confirmBtn.setFont(new Font("黑体", 0, 20));
        confirmBtn.setPreferredSize(new Dimension(600,40));
        confirmBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        JLabel label = new JLabel("<html><div style='width: 400px;color: red;font-size: 16px;text-align: left; white-space: pre-line;'>" + msg + "</div></html>");
        label.setForeground(Color.white);
        label.setFont(new Font("黑体", 0, fontSize));
        label.addMouseMotionListener(new MouseAdapter(){
            @Override
            public void mouseMoved(MouseEvent e) {

                    Object value=label.getText();
                    if(null!=value && !"".equals(value))
                        label.setToolTipText(value.toString());
                    else
                        label.setToolTipText(null);

            }


        });

        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        // 圆角矩形
        int radius = 30; // 圆角半径
        Shape shape = new RoundRectangle2D.Float(0, 0, getWidth(), getHeight(), radius, radius);
        setShape(shape); // 设置窗口形状

        //上部区域,只需要限制高度即可
        JPanel jPanel1=new JPanel(new FlowLayout(FlowLayout.LEFT));

        Box box = Box.createHorizontalBox();
        jPanel1.setBackground(new Color(38, 179, 93, 240));
        JLabel warnText = new JLabel("警告", warningIcon, JLabel.CENTER);
        warnText.setAlignmentX(Component.CENTER_ALIGNMENT);
        JLabel showText = new JLabel("(请移动鼠标至文字部分查看全部内容!)");
        showText.setAlignmentX(Component.LEFT_ALIGNMENT);
        showText.setForeground(Color.yellow);
        warnText.setFont(new Font("黑体", 0, 16));
        warnText.setForeground(Color.ORANGE);
        box.add(showText);
        box.add(Box.createHorizontalStrut(70)); // 水平间距
        box.add(warnText);
        box.add(Box.createHorizontalGlue());
        jPanel1.add(box);

        jPanel1.setPreferredSize(new Dimension(0,30));
        add(jPanel1,BorderLayout.NORTH);

        JPanel jPanel2=new JPanel();
        jPanel2.setPreferredSize(new Dimension(0,40));
        jPanel2.setBackground(new Color(38, 179, 93, 240));
        jPanel2.add(confirmBtn);
        add(jPanel2,BorderLayout.SOUTH);
        //中间区域,无需设置宽高,自适应。
        JPanel jPanel=new JPanel();
        jPanel.setBackground(color);
        jPanel.add(label);
        add(jPanel,BorderLayout.CENTER);


    }

    public static void buildWin(String msg){
        SwingUtilities.invokeLater(() -> {
            BeautifulPopup window = new BeautifulPopup(16,msg);
            window.setVisible(true);
        });

    }

    public static void main(String[] args) {

        buildWin("黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255 黑色背景,透明度为50的color;透明的取值范围0~255");
    }
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;

public class BeautifulConfirmPopup{
    private JDialog dialog;
    private int mouseX, mouseY;
    private boolean confirmOption;
    public static final String information = "OptionPane.informationIcon";
    public static final String warning = "OptionPane.warningIcon";
    public static final String error = "OptionPane.errorIcon";
    public static final String question = "OptionPane.questionIcon";
    public static final String plain = "OptionPane.plainIcon";

    public BeautifulConfirmPopup(Frame parent,int fontSize, String msg,String title,String icon) {
        dialog = new JDialog(parent, msg,true);
        // 事件监听器
        dialog.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                mouseX = e.getX();
                mouseY = e.getY();
            }
        });

        dialog.addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                // 计算窗口的新位置
                int x = e.getXOnScreen() - mouseX;
                int y = e.getYOnScreen() - mouseY;
                dialog.setLocation(x, y);
            }
        });


        Icon warningIcon = UIManager.getIcon(icon);

        //AWTUtilities.setWindowShape(win, new RoundRectangle2D.Double(0.0D, 0.0D, win.getWidth(), win.getHeight(), 6.0D, 6.0D));

        Color color = new Color(248, 255, 98, 180);// 黑色背景,透明度为50的color;透明的取值范围0~255
        dialog.setAlwaysOnTop(true);//设置窗口置顶
        dialog.setUndecorated(true);// 设置无边框
        dialog.setBackground(color);// 设置背景色


        JButton confirmBtn = new JButton("确认");
        confirmBtn.setBackground(new Color(38, 179, 93, 240));
        confirmBtn.setForeground(Color.black);
        confirmBtn.setBorder(null);
        confirmBtn.setFont(new Font("黑体", 0, 20));
        confirmBtn.setPreferredSize(new Dimension(100,40));
        confirmBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                confirmOption = true;
                dialog.dispose();


            }
        });
        JButton cancelBtn = new JButton("取消");
        cancelBtn.setBackground(new Color(38, 179, 93, 240));
        cancelBtn.setForeground(Color.black);
        cancelBtn.setBorder(null);
        cancelBtn.setFont(new Font("黑体", 0, 20));
        cancelBtn.setPreferredSize(new Dimension(100,40));
        cancelBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                confirmOption = false;
                dialog.dispose();

            }
        });
        JLabel label = new JLabel("<html><div style='width: 400px;color: red;font-size: 16px;text-align: left; white-space: pre-line;'>" + msg + "</div></html>");
        label.setForeground(Color.white);
        label.setFont(new Font("黑体", 0, fontSize));
        label.addMouseMotionListener(new MouseAdapter(){
            @Override
            public void mouseMoved(MouseEvent e) {

                    Object value=label.getText();
                    if(null!=value && !"".equals(value))
                        label.setToolTipText(value.toString());
                    else
                        label.setToolTipText(null);

            }


        });

        dialog.setSize(600, 400);

        dialog.setLocationRelativeTo(null);
        // 创建一个圆角矩形形状
        int radius = 30; // 圆角半径
        Shape shape = new RoundRectangle2D.Float(0, 0, dialog.getWidth(), dialog.getHeight(), radius, radius);
        dialog.setShape(shape); // 设置窗口形状

        //上部区域,只需要限制高度即可
        JPanel jPanel1=new JPanel(new FlowLayout(FlowLayout.LEFT));

        Box box = Box.createHorizontalBox();
        jPanel1.setBackground(new Color(38, 179, 93, 240));
        JLabel warnText = new JLabel(title, warningIcon, JLabel.CENTER);
        warnText.setAlignmentX(Component.CENTER_ALIGNMENT);
        JLabel showText = new JLabel("(请移动鼠标至文字部分查看全部内容!)");
        showText.setAlignmentX(Component.LEFT_ALIGNMENT);
        showText.setForeground(Color.yellow);
        warnText.setFont(new Font("黑体", 0, 16));
        warnText.setForeground(Color.ORANGE);
        box.add(showText);
        box.add(Box.createHorizontalStrut(70)); // 水平间距
        box.add(warnText);
        box.add(Box.createHorizontalGlue());


        jPanel1.add(box);

        jPanel1.setPreferredSize(new Dimension(0,30));
        dialog.add(jPanel1,BorderLayout.NORTH);

        JPanel jPanel2=new JPanel();
        jPanel2.setLayout(new GridBagLayout());
        jPanel2.setPreferredSize(new Dimension(0,40));
        jPanel2.setBackground(new Color(38, 179, 93, 240));
        jPanel2.add(confirmBtn);
        jPanel2.add(cancelBtn);
        dialog.add(jPanel2,BorderLayout.SOUTH);

        //中间区域,无需设置宽高,自适应。
        JPanel jPanel=new JPanel();
        jPanel.setBackground(color);
        jPanel.add(label);
        dialog.add(jPanel,BorderLayout.CENTER);


    }

    public boolean showDialog() {
        dialog.setVisible(true);
        return confirmOption;
    }

}

java swing制作界面还是不错的,后面有机会再创作一些javaFx的应用程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值