Java Swing中JDialog實(shí)現(xiàn)用戶登陸UI示例
本文實(shí)例講述了Java Swing中JDialog實(shí)現(xiàn)用戶登陸UI。分享給大家供大家參考,具體如下:
JDialog是一種對(duì)話框組件,它常常與JOptionPane配合使用。JOptionPane提供對(duì)話框內(nèi)部的消息、按鈕等內(nèi)容,JDialog提供對(duì)話框窗體,提供模態(tài)/非模態(tài)等屬性。JDialog與JFrame在外觀上的區(qū)別在于,它沒(méi)有最大化/最小化按鈕。如下圖所示:

JDialog窗體
點(diǎn)擊File-》connect之后彈出登陸窗口:

JFrame窗體
在下面的demo中,演示了JDialog構(gòu)造登錄窗體,以及從窗體中獲得數(shù)據(jù)的方法。
LoginDemoStart.java
package awtDemo;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/*
* @功能:使用JDialog構(gòu)造登陸對(duì)話框,并獲取登陸用戶信息
* @版本:20150804
* @結(jié)構(gòu):LoginDemoStart[主類(lèi),提供初始UI],PasswordChooser[提供登陸UI并獲取用戶信息],User[保存用戶信息]
*/
@SuppressWarnings("serial")
class LoginDemoStart extends JFrame{
/*
* @功能:提供初始UI,并調(diào)用PasswordChooser登陸界面
* @版本:20150804
*/
private JTextArea textArea;
private PasswordChooser passwordChooser ;
public LoginDemoStart(){
//構(gòu)造菜單欄
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);
//添加文本區(qū)域
textArea = new JTextArea();
add(new JScrollPane(textArea), BorderLayout.CENTER);
//設(shè)置窗體屬性
setTitle("LoginDemoStart - www.dbjr.com.cn");
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個(gè)panel
JPanel inputPanel = new JPanel();
JPanel buttonPanel = new JPanel();
//構(gòu)造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));
//構(gòu)造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));
//構(gòu)造主框架
setLayout(new BorderLayout());
getContentPane().add(inputPanel, BorderLayout.NORTH);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
//設(shè)置窗體屬性
setTitle("PasswordChooser - www.dbjr.com.cn");
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;
}
}
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- java模擬cookie登陸操作
- cookie、session和java過(guò)濾器結(jié)合實(shí)現(xiàn)登陸程序
- JAVA實(shí)現(xiàn)簡(jiǎn)單系統(tǒng)登陸注冊(cè)模塊
- JavaWeb登陸功能實(shí)現(xiàn)代碼
- JAVA簡(jiǎn)單鏈接Oracle數(shù)據(jù)庫(kù) 注冊(cè)和登陸功能的實(shí)現(xiàn)代碼
- java shiro實(shí)現(xiàn)退出登陸清空緩存
- JavaWeb基于Session實(shí)現(xiàn)的用戶登陸注銷(xiāo)方法示例
- Java Web實(shí)現(xiàn)session過(guò)期后自動(dòng)跳轉(zhuǎn)到登陸頁(yè)功能【基于過(guò)濾器】
- java客戶端登陸服務(wù)器用戶名驗(yàn)證
- Java Web開(kāi)發(fā)過(guò)程中登陸模塊的驗(yàn)證碼的實(shí)現(xiàn)方式總結(jié)
- Java 模擬cookie登陸簡(jiǎn)單操作示例
相關(guān)文章
SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
JAVA用戶自定義事件監(jiān)聽(tīng)實(shí)例代碼
這篇文章主要介紹了JAVA用戶自定義事件監(jiān)聽(tīng)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java如何使用httpclient檢測(cè)url狀態(tài)及鏈接是否能打開(kāi)
這篇文章主要介紹了Java如何使用httpclient檢測(cè)url狀態(tài)及鏈接是否能打開(kāi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java中Stream的flatMap與map使用場(chǎng)景及區(qū)別詳解
這篇文章主要介紹了Java中Stream的flatMap與map使用場(chǎng)景及區(qū)別詳解,Stream 流式操作,一般用于操作集合即 List 一類(lèi)的數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)單來(lái)說(shuō) Stream 的 map 使得其中的元素轉(zhuǎn)為另一種元素的映射(map)方法,需要的朋友可以參考下2024-01-01
Mybatis中兼容多數(shù)據(jù)源的databaseId(databaseIdProvider)的簡(jiǎn)單使用方法
本文主要介紹了Mybatis中兼容多數(shù)據(jù)源的databaseId(databaseIdProvider)的簡(jiǎn)單使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Redisson分布式信號(hào)量RSemaphore的使用超詳細(xì)講解
這篇文章主要介紹了Redisson分布式信號(hào)量RSemaphore的使用,基于Redis的Redisson的分布式信號(hào)量RSemaphore采用了與java.util.concurrent.Semaphore相似的接口和用法2023-02-02
Java如何優(yōu)雅實(shí)現(xiàn)數(shù)組切片和拼接操作
在做一道算法題的時(shí)候用到數(shù)組合并,并且有性能要求,這里對(duì)Java數(shù)組合并進(jìn)行總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java如何優(yōu)雅實(shí)現(xiàn)數(shù)組切片和拼接操作的相關(guān)資料,需要的朋友可以參考下2024-04-04

