绝对布局是指直接采用坐标指定的方式在容器中创建窗口,这种方式比较灵活
采用这种方法创建布局的方式主要有以下几步:
使用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界面如下: