具有圖片背景的登錄界面
三個類:LoginFrame , LoginPane ,BackGroundPane。
一張圖片:1.jpg,放到eclipse新建的images文件夾中
代碼:
1、
import javax.swing.JFrame;
import day18.LoginPane; //根據新建不同的包選擇
public class LoginFrame extends JFrame {
public LoginFrame() {
// setLocation(400,500); //設置位置
setLocationRelativeTo(null);// 居中
setSize(500, 400);// 窗口尺寸大小
setResizable(false);// 禁止調節窗口大小
//setBounds(100, 522, 100, 120);// 設置位置和尺寸大小
LoginPane lp = new LoginPane("images/1.jpg");
setContentPane(lp);//替換原來的默認面板
}
public static void main(String[] args) {
LoginFrame lf = new LoginFrame();//創建窗口對象
lf.setVisible(true);
}
}
2、
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 登錄面板 - 需要繼承JPanel才能成爲面板
*
*/
public class LoginPane extends BackGroundPane{
/**用戶名*/
private JLabel usernameLb;
/**密碼*/
private JLabel passwordLb;
/**用戶名輸入框*/
private JTextField usernameTf;
/**密碼輸入框*/
private JPasswordField passwordPf;
/**登錄按鈕*/
private JButton loginBtn;
/**重置按鈕*/
private JButton resetBtn;
public LoginPane(String imageUrl){
super(imageUrl);
setBackground(Color.GREEN);//設置背景顏色
initComponents();//初始化組件
layoutComponents();//佈局組件
}
/**
* 初始化組件
*/
private void initComponents(){
usernameLb = new JLabel("用戶名");
passwordLb = new JLabel("密碼");
usernameTf = new JTextField();
passwordPf = new JPasswordField();
loginBtn = new JButton("登錄");
resetBtn = new JButton("重置");
}
/**
* 佈局組件
*/
private void layoutComponents(){
setLayout(null);//絕對定位佈局
usernameLb.setBounds(80, 50, 50, 30);//設定組件的絕對位置和大小
usernameTf.setBounds(150, 50, 150, 30);
passwordLb.setBounds(80, 100, 50, 30);//設定組件的絕對位置和大小
passwordPf.setBounds(150, 100, 150, 30);
loginBtn.setBounds(100, 150, 80, 30);
resetBtn.setBounds(200, 150, 80, 30);
add(usernameLb);
add(usernameTf);
add(passwordLb);
add(passwordPf);
add(loginBtn);
add(resetBtn);
}
}
3、
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/**
* 具有背景的面板
*/
public class BackGroundPane extends JPanel {
private String imageUrl;
public BackGroundPane(String imageUrl) {
super();
this.imageUrl = imageUrl;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(null!=imageUrl){
try {
Image img = ImageIO.read(new File(imageUrl));
g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
運行結果如下: