前段时间学习了关于登录界面的代码编写,觉得挺有意思,开始的时候一直接纠结于窗体上一些组件的排版问题,每次写完代码后总发现那些组件的排列顺序总不能想自己想的那样,后来只有好好的钻研几种布局的特点及用法,还有一些其他容器的用法,解决一些复杂结构的排版,就要用到JPanel和JSplitPane,但是用的还是很熟练,以下是我根据资料写的一个仿QQ登录界面,也是这几天研究的关于在登录界面中添加背景图片,添加了背景图片以后确实很难进行复杂的结构排序,所以下面的界面很简单。
代码如下:
package java0627;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LoginJFrame {
public JFrame jframe;
public JLabel jlabel, jlabel1;
public GridBagLayout gridbag;
public GridBagConstraints constraints;
public JTextField jtfield1;
public JPasswordField jpfield1;
public JButton jbutton1, jbutton2, jbutton3;
public JPanel jpanel;
/**
* 主函数
*/
public static void main(String[] args) {
LoginJFrame lj = new LoginJFrame();
lj.init();
lj.showMe();
}
/**
* init()初始化并显示界面
*/
private void init(){
jframe = new JFrame();
jframe.setTitle("小鱼儿的QQ");
jlabel = new JLabel();
jlabel.setText("用户名:");
jlabel1 = new JLabel();
jlabel1.setText("密 码:");
jtfield1 = new JTextField(7);
jpfield1 = new JPasswordField(7);
gridbag = new GridBagLayout();
jbutton1 = new JButton();
jbutton1.setText("登 录");
jbutton2 = new JButton();
jbutton2.setText("退 出");
jbutton3 = new JButton();
jbutton3.setText("更改密码");
jpanel = new JPanel() {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
java.net.URL ur12 = this.getClass().getResource("j01.jpg");
ImageIcon img = new ImageIcon(ur12);
img.paintIcon(this, g, 0, 0);
}
};
//设置窗体属性
jframe.setBounds(200, 200, 460, 340);
jframe.setDefaultCloseOperation(3);
// 设置JPanel为透明,且使用GridBagLayout布局管理器
jpanel.setOpaque(true);
jpanel.setLayout(gridbag);
// 用户名文本框显示
constraints = getGridBagConstraints(0, 0, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 0, 0);
gridbag.setConstraints(jlabel, constraints);
jpanel.add(jlabel);
// 用户名输入框显示
constraints = getGridBagConstraints(1, 0, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 100, 0);
gridbag.setConstraints(jtfield1, constraints);
jpanel.add(jtfield1);
// 密码文本框显示
constraints = getGridBagConstraints(0, 1, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 0, 0);
gridbag.setConstraints(jlabel1, constraints);
jpanel.add(jlabel1);
// 密码输入框显示
constraints = getGridBagConstraints(1, 1, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 100, 0);
gridbag.setConstraints(jpfield1, constraints);
jpanel.add(jpfield1);
// 更改密码按钮显示
constraints = getGridBagConstraints(0, 2, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 0, 0);
gridbag.setConstraints(jbutton3, constraints);
jpanel.add(jbutton3);
// 登录按钮显示
constraints = getGridBagConstraints(1, 2, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 0, 0);
gridbag.setConstraints(jbutton1, constraints);
jpanel.add(jbutton1);
// 退出按钮显示
constraints = getGridBagConstraints(2, 2, 1, 1, 0, 0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(
10, 0, 10, 0), 0, 0);
gridbag.setConstraints(jbutton2, constraints);
jpanel.add(jbutton2);
jframe.add(jpanel);
}
private static GridBagConstraints getGridBagConstraints(int gridx,
int gridy, int gridwidth, int gridheight, double weightx,
double weighty, int anchor, int fill, Insets insets, int ipadx,
int ipady) {
return new GridBagConstraints(gridx, gridy, gridwidth, gridheight,
weightx, weighty, anchor, fill, insets, ipadx, ipady);
}
public void showMe() {
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true);
}
}
附件上有登录界面截图: