目录
主界面架构
用java swing 搭建图形界面已经极不实用,swing框架搭建的GUI界面局限性很高,它需要配套的jre环境才能运行,搭建的界面也并不美观。但对于初学者来讲,学习swing有助于了解MVC架构与监听器的使用,有些学校也会以java swing设置考核。
作为一个登录界面界面它主要的组件与功能
组件 | 类型 | 功能 |
---|---|---|
登录按钮 | JButton | 链接监听器实现登录功能 |
标签 | JLable | 包括图片标签与文字标签等 |
复选按钮 | JCheckBox | 细化登录操作 |
输入框 | TextFiled | 输入账号 |
密码框 | PasswordFiled | 输入密码 |
面板
添加各种组件的容器就是面板,一般窗口被划分为多个部分为需要使用面板,这里我建立了三个面板添加不同组件
public LoadFrame(){
// LoadFrame frame=new LoadFrame();
//新建容器
Container container=this.getContentPane();
//设置空布局
container.setLayout(null);
//添加两个新的面板
//上半部分静态面板
JPanel staticpanel=new JPanel();
staticpanel.setBounds(0,0,430,65);
//中间面板
JPanel centerpanel=new JPanel();
centerpanel.setBounds(0,65,430,80);
//下半部分输入面板
JPanel textpanel=new JPanel();
textpanel.setBounds(0,145,430,185);
}
登录按钮
新建单独的按钮类,主函数中面板添加按钮时会调用它的setBounds设置按钮在当前面板中的位置
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class SignInButton extends JButton {
public SignInButton(String title){
super(title);
this.setBounds(125,110,200,30);
this.setBackground(new Color(22, 221, 238));
this.setVisible(true);
}
}
输入框
这里的输入框与密码框都是用TextFiled类来实现的,PasswFiled类与它的不同在于PasswFiled类可以自动将输入的数据转化为'*',TextFiled类通过调用setEchoChar方法也可以自定义它所显示的字符;
在输入框中,我将输入框及它的图标标签与文字标签都封装于一个面板中
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class inPutText extends JFrame {
//账号输入
public JPanel Userinput(){
JPanel panel=new JPanel();
TextField field = new TextField(10);
JLabel label=new JLabel("账号");
URL uRl=inPutText.class.getResource("Source/qq.png");
ImageIcon icon=new ImageIcon(uRl);
JLabel label1 = new JLabel(icon);
panel.setBounds(144,20,142,25);
label1.setBounds(0,0,12,25);
label.setBounds(12,0,26,25);
field.setBounds(38,0,104,25);
panel.setLayout(null);
panel.add(label1);
panel.add(label);
panel.add(field);
return panel;
}
//密码输入
public JPanel PassInput(){
JPanel panel=new JPanel();
TextField field = new TextField();
field.setEchoChar('*');
JLabel label=new JLabel("密码");
URL uRl=inPutText.class.getResource("Source/pass.png");
ImageIcon icon=new ImageIcon(uRl);
JLabel label1 = new JLabel(icon);
panel.setBounds(144,50,142,25);
label1.setBounds(0,0,12,25);
label.setBounds(12,0,26,25);
field.setBounds(38,0,104,25);
panel.setLayout(null);
panel.add(label1);
panel.add(label);
panel.add(field);
return panel;
}
主函数
主函数中其他组件并没有被单独封装到类中,而是在LoadFrame中实现
除此之外还有建立图标所用的图片,他们被放置在相同目录的Source包中
他可以通过当前类.class.getResource()获取路径
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.security.cert.LDAPCertStoreParameters;
public class LoadFrame extends JFrame {
//获取当前屏幕尺寸
Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();
private int width=430;
private int height=330;
private int x=(scrSize.width-width)/2;
private int y=(scrSize.height-height)/2;
public LoadFrame(){
// LoadFrame frame=new LoadFrame();
//新建容器
Container container=this.getContentPane();
URL url = LoadFrame.class.getResource("Source/qqicon.png");
ImageIcon icon=new ImageIcon(url);
JLabel jl=new JLabel("");
jl.setIcon(icon);
jl.setSize(icon.getIconWidth(),icon.getIconHeight());
container.setLayout(null);
//添加两个新的面板
//上半部分静态面板
JPanel staticpanel=new JPanel();
staticpanel.setBounds(0,0,430,65);
//中间面板
JPanel centerpanel=new JPanel();
centerpanel.setBounds(0,65,430,80);
//下半部分输入面板
JPanel textpanel=new JPanel();
textpanel.setBounds(0,145,430,185);
staticpanel.setBackground(new Color(31, 176, 201, 220));
centerpanel.setBackground(new Color(87, 216, 238, 220));
textpanel.setBackground(new Color(154, 222, 234, 220));
//添加头像
// jl.setSize(icon.getIconWidth(),icon.getIconHeight());
textpanel.setLayout(null);
//添加登录按钮
SignInButton button = new SignInButton("登录");
textpanel.add(button);
centerpanel.add(jl);
jl.setHorizontalAlignment(SwingConstants.CENTER);
// MyIcon myIcon = new MyIcon();
//添加账号输入框
inPutText text = new inPutText();
textpanel.add(text.Userinput());
//添加密码输入框
inPutText text1 = new inPutText();
textpanel.add(text1.PassInput());
//添加复选按钮
JCheckBox checkBox01 = new JCheckBox("自动登录");
JCheckBox checkBox02 = new JCheckBox("记住密码");
checkBox01.setBounds(95,80,80,15);
checkBox02.setBounds(175,80,80,15);
//添加标签
JLabel label01 = new JLabel("忘记密码");
JLabel label02 = new JLabel("注册账号");
label01.setBounds(275,80,80,15);
label02.setBounds(50,120,80,15);
textpanel.add(checkBox01);
textpanel.add(checkBox02);
textpanel.add(label01);
textpanel.add(label02);
//将面板添加到容器
container.add(centerpanel);
container.add(staticpanel);
container.add(textpanel);
this.setBounds(x,y,width,height);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public void Init(){
}
public static void main(String[] args) {
LoadFrame frame = new LoadFrame();
}
}
界面图