Java Swing中JDialog實(shí)現(xiàn)用戶登陸UI示例
本文實(shí)例講述了Java Swing中JDialog實(shí)現(xiàn)用戶登陸UI。分享給大家供大家參考,具體如下:
JDialog是一種對話框組件,它常常與JOptionPane配合使用。JOptionPane提供對話框內(nèi)部的消息、按鈕等內(nèi)容,JDialog提供對話框窗體,提供模態(tài)/非模態(tài)等屬性。JDialog與JFrame在外觀上的區(qū)別在于,它沒有最大化/最小化按鈕。如下圖所示:
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)造登陸對話框,并獲取登陸用戶信息 * @版本:20150804 * @結(jié)構(gòu):LoginDemoStart[主類,提供初始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)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
- java模擬cookie登陸操作
- cookie、session和java過濾器結(jié)合實(shí)現(xiàn)登陸程序
- JAVA實(shí)現(xiàn)簡單系統(tǒng)登陸注冊模塊
- JavaWeb登陸功能實(shí)現(xiàn)代碼
- JAVA簡單鏈接Oracle數(shù)據(jù)庫 注冊和登陸功能的實(shí)現(xiàn)代碼
- java shiro實(shí)現(xiàn)退出登陸清空緩存
- JavaWeb基于Session實(shí)現(xiàn)的用戶登陸注銷方法示例
- Java Web實(shí)現(xiàn)session過期后自動(dòng)跳轉(zhuǎn)到登陸頁功能【基于過濾器】
- java客戶端登陸服務(wù)器用戶名驗(yàn)證
- Java Web開發(fā)過程中登陸模塊的驗(yàn)證碼的實(shí)現(xiàn)方式總結(jié)
- Java 模擬cookie登陸簡單操作示例
相關(guān)文章
SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Java如何使用httpclient檢測url狀態(tài)及鏈接是否能打開
這篇文章主要介紹了Java如何使用httpclient檢測url狀態(tài)及鏈接是否能打開,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java中Stream的flatMap與map使用場景及區(qū)別詳解
這篇文章主要介紹了Java中Stream的flatMap與map使用場景及區(qū)別詳解,Stream 流式操作,一般用于操作集合即 List 一類的數(shù)據(jù)結(jié)構(gòu),簡單來說 Stream 的 map 使得其中的元素轉(zhuǎn)為另一種元素的映射(map)方法,需要的朋友可以參考下2024-01-01Mybatis中兼容多數(shù)據(jù)源的databaseId(databaseIdProvider)的簡單使用方法
本文主要介紹了Mybatis中兼容多數(shù)據(jù)源的databaseId(databaseIdProvider)的簡單使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Redisson分布式信號量RSemaphore的使用超詳細(xì)講解
這篇文章主要介紹了Redisson分布式信號量RSemaphore的使用,基于Redis的Redisson的分布式信號量RSemaphore采用了與java.util.concurrent.Semaphore相似的接口和用法2023-02-02Java如何優(yōu)雅實(shí)現(xiàn)數(shù)組切片和拼接操作
在做一道算法題的時(shí)候用到數(shù)組合并,并且有性能要求,這里對Java數(shù)組合并進(jìn)行總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java如何優(yōu)雅實(shí)現(xiàn)數(shù)組切片和拼接操作的相關(guān)資料,需要的朋友可以參考下2024-04-04