直接上效果图:
提醒弹窗:
确认弹窗:
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的应用程序。