Java Swing中JDialog实现用户登陆UI示例

 更新时间:2017年11月14日 12:25:20   作者:pzy4447  
这篇文章主要介绍了Java Swing中JDialog实现用户登陆UI功能,结合完整实例形式分析了Swing使用JDialog实现用户登陆UI界面窗口功能的步骤与相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java Swing中JDialog实现用户登陆UI。分享给大家供大家参考,具体如下:

JDialog是一种对话框组件,它常常与JOptionPane配合使用。JOptionPane提供对话框内部的消息、按钮等内容,JDialog提供对话框窗体,提供模态/非模态等属性。JDialog与JFrame在外观上的区别在于,它没有最大化/最小化按钮。如下图所示:

JDialog窗体

 点击File-》connect之后弹出登陆窗口:

JFrame窗体

在下面的demo中,演示了JDialog构造登录窗体,以及从窗体中获得数据的方法。

LoginDemoStart.java

package awtDemo;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/*
 * @功能:使用JDialog构造登陆对话框,并获取登陆用户信息
 * @版本:20150804
 * @结构:LoginDemoStart[主类,提供初始UI],PasswordChooser[提供登陆UI并获取用户信息],User[保存用户信息]
 */
@SuppressWarnings("serial")
class LoginDemoStart extends JFrame{
  /*
   * @功能:提供初始UI,并调用PasswordChooser登陆界面
   * @版本:20150804
   */
  private JTextArea textArea;
  private PasswordChooser passwordChooser ;
  public LoginDemoStart(){
    //构造菜单栏
    JMenuBar mbar = new JMenuBar();
    setJMenuBar(mbar);
    JMenu fileMenu = new JMenu("File");
    JMenuItem connectItem = new JMenuItem("connect");
    connectItem.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        //if 1st time,construct a dialog
        passwordChooser = new PasswordChooser(LoginDemoStart.this);
        passwordChooser.setVisible(true);
        if(passwordChooser.isLogedIn())
        {
          User u = passwordChooser.getUser();
          textArea.append("Username = " + u.getName() + ", Password = " + new String(u.getPassword()) + "\n");
        }
      }
    });
    JMenuItem exitItem = new JMenuItem("exit");
    exitItem.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.exit(0);
      }
    });
    mbar.add(fileMenu);
    fileMenu.add(connectItem);
    fileMenu.add(exitItem);
    //添加文本区域
    textArea = new JTextArea();
    add(new JScrollPane(textArea), BorderLayout.CENTER);
    //设置窗体属性
    setTitle("LoginDemoStart - www.jb51.net");
    setSize(300,200);
    setLocationRelativeTo(null);
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    LoginDemoStart loginDemoStart = new LoginDemoStart();
    loginDemoStart.setVisible(true);
  }
}

PasswordChooser.java

package awtDemo;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*
 * @功能:提供登陆UI并获取用户信息
 * @版本:20150804
 */
@SuppressWarnings("serial")
class PasswordChooser extends JDialog{
  private JTextField username ;
  private JPasswordField password ;
  private JButton okButton ;
  private JButton cancelButton ;
  private boolean isLogedIn = false;
  public PasswordChooser(Frame parent){
    super(parent, true);
    //本UI包含2个panel
    JPanel inputPanel = new JPanel();
    JPanel buttonPanel = new JPanel();
    //构造inputPanel    
    inputPanel.setLayout(new GridLayout(2,2));
    inputPanel.add(new JLabel("Useername:"));
    username = new JTextField();
    username.setColumns(10);
    password = new JPasswordField();
    password.setColumns(10);
    inputPanel.add(username);
    inputPanel.add(new JLabel("Password:"));
    inputPanel.add(password);
    inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
    //构造buttonPanel    
    okButton = new JButton("OK");
    okButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        isLogedIn = true;
        setVisible(false);
      }
    });
    cancelButton = new JButton("Cancel");
    cancelButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        setVisible(false);
      }
    });
    buttonPanel.add(okButton);
    buttonPanel.add(cancelButton);
    buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));
    //构造主框架
    setLayout(new BorderLayout());
    getContentPane().add(inputPanel, BorderLayout.NORTH);
    getContentPane().add(buttonPanel, BorderLayout.SOUTH);
    //设置窗体属性
    setTitle("PasswordChooser - www.jb51.net");
    setLocationRelativeTo(inputPanel);
    //setPreferredSize(new Dimension(300, 200));
    pack();
    //System.out.println(getPreferredSize());
  }
  public void setUser(User u){
    username.setText(u.getName());
  }
  public User getUser(){
    return new User(username.getText(), password.getPassword());
  }    
  public boolean isLogedIn(){
    return isLogedIn;
  }    
  public static void main(String[] args) {
    // TODO Auto-generated method stub
  }
}

User.java

package awtDemo;
/*
 * @功能:保存用户信息
 * @版本:20150804
 */
class User{
  private String name;
  private char[] password;
  public User(String aName, char[] aPassword){
     name = aName;
     password = aPassword;
  }
  public String getName(){
    return name;
  }
  public char[] getPassword(){
    return password;     
  }
  public void setName(String aName){
    name = aName;
  }
  public void setPassword(char[] aPassword){
    password = aPassword;
  }
}

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • SpringBoot使用jsr303校验的实现

    SpringBoot使用jsr303校验的实现

    这篇文章主要介绍了SpringBoot使用jsr303校验的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 基于SpringMVC入门案例及讲解

    基于SpringMVC入门案例及讲解

    这篇文章主要介绍了基于SpringMVC入门案例及讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • JAVA用户自定义事件监听实例代码

    JAVA用户自定义事件监听实例代码

    这篇文章主要介绍了JAVA用户自定义事件监听实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java如何使用httpclient检测url状态及链接是否能打开

    Java如何使用httpclient检测url状态及链接是否能打开

    这篇文章主要介绍了Java如何使用httpclient检测url状态及链接是否能打开,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java中Stream的flatMap与map使用场景及区别详解

    Java中Stream的flatMap与map使用场景及区别详解

    这篇文章主要介绍了Java中Stream的flatMap与map使用场景及区别详解,Stream 流式操作,一般用于操作集合即 List 一类的数据结构,简单来说 Stream 的 map 使得其中的元素转为另一种元素的映射(map)方法,需要的朋友可以参考下
    2024-01-01
  • Mybatis中兼容多数据源的databaseId(databaseIdProvider)的简单使用方法

    Mybatis中兼容多数据源的databaseId(databaseIdProvider)的简单使用方法

    本文主要介绍了Mybatis中兼容多数据源的databaseId(databaseIdProvider)的简单使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Redisson分布式信号量RSemaphore的使用超详细讲解

    Redisson分布式信号量RSemaphore的使用超详细讲解

    这篇文章主要介绍了Redisson分布式信号量RSemaphore的使用,基于Redis的Redisson的分布式信号量RSemaphore采用了与java.util.concurrent.Semaphore相似的接口和用法
    2023-02-02
  • Java Validated 分组校验的使用

    Java Validated 分组校验的使用

    这篇文章主要介绍了Java Validated 分组校验的使用,文章记录所以在这里记录下分组校验注解@Validated的使用,具有一定的参考价值,需要的朋友可以参考一下
    2022-02-02
  • MyBatis中的模糊查询语句

    MyBatis中的模糊查询语句

    这篇文章主要介绍了MyBatis中的模糊查询语句的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java如何优雅实现数组切片和拼接操作

    Java如何优雅实现数组切片和拼接操作

    在做一道算法题的时候用到数组合并,并且有性能要求,这里对Java数组合并进行总结,下面这篇文章主要给大家介绍了关于Java如何优雅实现数组切片和拼接操作的相关资料,需要的朋友可以参考下
    2024-04-04

最新评论