本文共 5592 字,大约阅读时间需要 18 分钟。
目录
用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(); } }
转载地址:http://ffcki.baihongyu.com/