Java-JFrame窗体美化
JFrame默认的窗体比较土,可以通过一定的美化,让窗体表现的比较漂亮,具体要根据设计的设计图进行美化;
JFrame美化的大致思路:先将JFrame去除默认美化效果,实现JWindow效果,然后再JWindow基础上对窗体的各项内容自定义设置与美化,大多用到插入背景图片、添加各种鼠标事件、弹窗与输入框等圆角等各种美化;
下面是一个登录窗体的美化代码,以后再有对窗体美化的可以参照一下代码进行美化:
1、Login实体类代码:
package com;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Image;
import java.awt.geom.RoundRectangle2D;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JLabel;
import com.alibaba.fastjson.JSON;
import com.model.Message;
import com.model.User;
import com.sun.awt.AWTUtilities;
import com.util.FileUtils;
import com.util.MyButton;
import com.util.MyLineBorder;
import com.util.VerifyCodeUtils;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTextField;
import javax.swing.border.MatteBorder;
import javax.swing.JPasswordField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
/**
* 用户登录窗体(按照设计图片效果制作)
* @author admin
*
*/
public class Login1{
private JFrame frame;//窗体
private JTextField userNameField;//用户名输入框
private JPasswordField passwordField;//密码输入框
private JTextField verifyCodeField;//验证码输入框
private String verifyCode;//验证码图片中的验证码值
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Login1 window = new Login1();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Login1() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
//将存储验证码文件夹下的所有验证码图片删除
FileUtils.deleteAllFiles("./verifyCodeImg");
//自定义圆角输入框边界线
MyLineBorder myLineBorder = new MyLineBorder(new Color(192, 192, 192), 1 , true);
//只显示输入框的下边框
MatteBorder bottomBorder = new MatteBorder(0, 0, 1, 0, new Color(192, 192, 192));
//设置JFrame禁用本地外观,使用下面自定义设置的外观;
JFrame.setDefaultLookAndFeelDecorated(true);
frame = new JFrame();
frame.setBounds(0, 0, 300, 490);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
/**
* 对窗体进行基本设置
*/
//设置窗体在计算机窗口的中心部位显示
frame.setLocationRelativeTo(frame.getOwner());
// 去掉窗口的装饰
frame.setUndecorated(true);
//采用指定的窗口装饰风格
frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
//设置窗体圆角,最后两个参数分别为圆角的宽度、高度数值,一般这两个数值都是一样的
AWTUtilities.setWindowShape(frame,
new RoundRectangle2D.Double(0.0D, 0.0D, frame.getWidth(), frame.getHeight(), 20.0D, 20.0D));
//设置背景颜色,记住一定要修改frame.getContentPane()的颜色,因为我们看到的都是这个的颜色而并不是frame的颜色
frame.getContentPane().setBackground(Color.white);
/**
* 插入顶部非凡汽车背景图片
*/
//创建具有分层的JLayeredPane
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setBounds(0, -5, 300, 200);
frame.getContentPane().add(layeredPane);
// 创建图片对象
ImageIcon img = new ImageIcon(Login1.class.getResource("/images/dingbu.jpg"));
//设置图片在窗体中显示的宽度、高度
img.setImage(img.getImage().getScaledInstance(300, 200,Image.SCALE_DEFAULT));
JPanel panel = new JPanel();
panel.setBounds(0, -5, 300, 200);
layeredPane.add(panel, JLayeredPane.DEFAULT_LAYER);
JLabel lblNewLabel = new JLabel("");
panel.add(lblNewLabel);
lblNewLabel.setIcon(img);
/**
* 插入窗体关闭的背景图片及功能
*/
// 创建图片对象
ImageIcon closeImg = new ImageIcon(Login1.class.getResource("/images/close.png"));
//设置图片在窗体中显示的宽度、高度
closeImg.setImage(closeImg.getImage().getScaledInstance(31, 31,Image.SCALE_DEFAULT));
JPanel closePanel = new JPanel();
closePanel.setBounds(269, -5, 31, 31);
layeredPane.add(closePanel,JLayeredPane.MODAL_LAYER);
JLabel closeLabel = new JLabel("");
closePanel.add(closeLabel);
closeLabel.setIcon(closeImg);
closeLabel.addMouseListener(new MouseAdapter() {
//鼠标点击关闭图片,实现关闭窗体的功能
@Override
public void mouseClicked(MouseEvent e) {
//dispose();
System.exit(0);//使用dispose();也可以关闭只是不是真正的关闭
}
//鼠标进入,换关闭的背景图片
@Override
public void mouseEntered(MouseEvent e) {
// 创建图片对象
ImageIcon closeImg1 = new ImageIcon(Login1.class.getResource("/images/mouse_close.png"));
//设置图片在窗体中显示的宽度、高度
closeImg1.setImage(closeImg1.getImage().getScaledInstance(31, 31,Image.SCALE_DEFAULT));
closeLabel.setIcon(closeImg1);
}
//鼠标离开,换关闭的背景图片
@Override
public void mouseExited(MouseEvent e) {
// 创建图片对象
ImageIcon closeImg = new ImageIcon(Login1.class.getResource("/images/close.png"));
//设置图片在窗体中显示的宽度、高度
closeImg.setImage(closeImg.getImage().getScaledInstance(31, 31,Image.SCALE_DEFAULT));
closeLabel.setIcon(closeImg);
}
});
/**
* 插入窗体最小化的背景图片及功能
*/
// 创建图片对象
ImageIcon minImg = new ImageIcon(Login1.class.getResource("/images/min.png"));
//设置图片在窗体中显示的宽度、高度
minImg.setImage(minImg.getImage().getScaledInstance(31, 31,Image.SCALE_DEFAULT));
JPanel minPanel = new JPanel();
minPanel.setBounds(237, -5, 31, 31);
layeredPane.add(minPanel,JLayeredPane.MODAL_LAYER);
JLabel minLabel = new JLabel("");
minLabel.addMouseListener(new MouseAdapter() {
//鼠标点击最小化图片,实现最小化窗体的功能
@Override
public void mouseClicked(MouseEvent e) {
frame.setExtendedState(JFrame.ICONIFIED);//最小化窗体
}
//鼠标进入,换最小化的背景图片
@Override
public void mouseEntered(MouseEvent e) {
// 创建图片对象
ImageIcon minImg1 = new ImageIcon(Login1.class.getResource("/images/mouse_min.png"));
//设置图片在窗体中显示的宽度、高