绝对布局是指直接采用坐标指定的方式在容器中创建窗口,这种方式比较灵活
采用这种方法创建布局的方式主要有以下几步:
- 使用Container.setLayout(null)的方式取消布局管理器
- 使用Compon.setBounds()的方式来设置每个组件的大小
下面先上代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class UseCase3 extends JFrame {/****/private static final long serialVersionUID = 1L;public UseCase3() {setTitle("登录窗体");setBounds(300, 200, 300, 150);//绝对布局,不使用布局管理器Container cp = getContentPane();cp.setLayout(null);JLabel jl = new JLabel("用户名:");jl.setBounds(10, 10, 200, 18);final JTextField name = new JTextField();name.setBounds(80, 10, 150, 18);JLabel jl2 = new JLabel("密码:");jl2.setBounds(10, 50, 200, 18);final JPasswordField password = new JPasswordField();password.setBounds(80, 50, 150, 18);cp.add(jl);cp.add(name);cp.add(jl2);cp.add(password);JButton jb = new JButton("确定");jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {if (name.getText().trim().length() == 0|| new String(password.getPassword()).trim().length() == 0) {JOptionPane.showMessageDialog(null, "用户名密码不允许为空");return;}if (name.getText().trim().equals("mr")&& new String(password.getPassword()).trim().equals("mrsoft")) {JOptionPane.showMessageDialog(null, "登录成功");} else {JOptionPane.showMessageDialog(null, "用户名或密码错误");}}});jb.setBounds(80, 80, 60, 18);cp.add(jb);final JButton button = new JButton();button.setText("重置");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {// TODO 自动生成方法存根name.setText("");password.setText("");}});button.setBounds(150, 80, 60, 18);getContentPane().add(button);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new UseCase3();}}
下面我来简易分析一下代码的逻辑
- 首先使用了seTtitle()方法来命名窗口的名称
- 接下来设置了窗口的大小
- 定义了一个容器
- 接下来就是来定义在窗口上的各种组件
- 最后要记得使用add()方法把组件添加到容器上去
-
密码验证功能的核心实现:这里只是简单的密码验证,并不涉及到过多的算法,下面着重看一下密码验证部分:
public void actionPerformed(ActionEvent arg0) {if (name.getText().trim().length() == 0|| new String(password.getPassword()).trim().length() == 0) {JOptionPane.showMessageDialog(null, "用户名密码不允许为空");return;}if (name.getText().trim().equals("mr")&& new String(password.getPassword()).trim().equals("mrsoft")) {JOptionPane.showMessageDialog(null, "登录成功");} else {JOptionPane.showMessageDialog(null, "用户名或密码错误");}}
getText()来获取输入的密码文本,trim()来去除两边多余的空格,首先我们需要判断这个框里有东西,这就用到了length()==0的验证方法,这个不难。
后面用到的JOptionPane()方法里面的null可以理解为直接获取返回值,不用过多的去管它。
可以看到后面所谓的“登录验证”无非就是用户名与所设密码的一个与运算罢了,两个都符合的话就可以登陆了(此实例中并不涉及到后台接口的相关问题)
用户输入错误的密码怎么办呢?
这里提供一个快速重置的方法,先上代码:
final JButton button = new JButton();button.setText("重置");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {// TODO 自动生成方法存根name.setText("");password.setText("");
可以看到,无非就是提供了一个所谓的重置按钮,触发的事件是将name与password里的名称重置为空字符串,这样就完成了重置的作用,不过也可以将密码和账号名单独分开,这样对用户来说比较友好,毕竟不是所有人都会同时输错密码与账号
最后一调用,结果就出来了
public static void main(String[] args) {new UseCase3();}
GUI界面如下: