前言
大家知道
在登錄Microsoft Windows操作系統過程中
在登錄窗口中需要用戶輸入注冊用戶名稱和密碼
細心的讀者會發現
用戶輸入的注冊用戶名稱內容為原碼字符顯示
而注冊密碼內容為掩碼字符顯示
例如
同樣在兩各文本區中輸入字符
a
在用戶名文本區中顯示的是字符
a
而在密碼區中顯示的字符為掩碼
*
這就是所謂的密碼屏蔽輸入
將輸入的密碼屏蔽回顯
不僅增強了用戶私有信息的安全性
更重要的是維護了計算機系統的穩定性和安全性
Java以其語言的面向對象能力
高安全性和Java平台的系統無關性等技術優勢
在商務軟件開發過程中贏得了眾多程序設計人員的青睐
JDK在AWT和JFC類庫中定義了用於密碼字符屏蔽的應用程序設計接口(API)
使應用系統開發人員在編寫圖形用戶界面程序時
能夠靈活地定義密碼回顯方式
但是
對於基於命令行方式的Java應用程序
JDK沒有定義相應的密碼屏蔽策略
程序設計人員必須編寫字符回顯控制代碼
本文將通過對實例代碼的分析
對基於JDK平台開發Java應用程序的密碼屏蔽輸入方法進行探討
主要內容包括
●AWT組件對象密碼屏蔽方法
●JSwing組件對象密碼屏蔽方法
●Java命令行程序密碼屏蔽方法
利用AWT組件實現密碼屏蔽輸入
Java抽象窗口工具包(Abstract Window Toolkit
AWT)是在JDK
版本中定義的用於編寫Java圖形用戶界面程序的應用程序設計接口
程序設計人員可以利用該包中定義的多種類型組件對象
編寫具有用戶界面的應用程序
為了實現用戶輸入信息的屏蔽
可以利用AWT組件庫中定義的TextField對象
該對象的定義繼承結構如下
java
lang
Object
|
+
java
awt
Component
|
+
java
awt
TextComponent
|
+
java
awt
TextField
在該對象中
定義了用於設置和維護用戶輸入字符回顯方式的方法
這些方法的定義形式為
char getEchoChar()
獲取用戶定義的文本區回顯字符
boolean echoCharIsSet()判斷是否定義了回顯字符
void setEchoChar(char c)
設置文本區回顯字符為字符c
因此
在讀者編寫的Java程序中
可以在創建TextField對象實例後
例如上述方法控制文本區回顯字符的方式
下面的程序完整地演示了回顯字符的定義方式
//PasswordMaskingDemo
java
import java
awt
*;
import java
awt
event
*;
import javax
swing
JOptionPane;
public class PasswordMaskingDemo
{
public static void main(String args[])
{
final Frame frmFrame = new Frame();
Panel pnlPanel = new Panel();
Label lblUsername = new Label(
用戶名
);
Label lblPassword = new Label(
密碼
);
final TextField txtUsername = new TextField(
Anyomonus
);
final TextField txtPassword = new TextField(
);
txtUsername
setEditable(false);
txtPassword
setEchoChar(
*
);
Button btnButton
= new Button(
登錄
);
Button btnButton
= new Button(
其它用戶登錄
);
Button btnButton
= new Button(
關閉
);
btnButton
addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if( (txtPassword
getText())
length() ==
)
{
JOptionPane
showMessageDialog
(frmFrame
密碼不能為空
);
return;
}
txtPassword
setColumns(
);
System
out
println(
Anyomonus用戶的密碼
+
txtPassword
getText() );
}
});
btnButton
addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
txtUsername
setEditable(true);
}
});
btnButton
addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System
exit(
);
}
});
pnlPanel
add(lblUsername);
pnlPanel
add(txtUsername);
pnlPanel
add(lblPassword);
pnlPanel
add(txtPassword);
pnlPanel
add(btnButton
);
pnlPanel
add(btnButton
);
pnlPanel
add(btnButton
);
frmFrame
add(pnlPanel);
frmFrame
setTitle(
演示TextField對象的應用方法
);
frmFrame
pack();
frmFrame
show();
}
}
該程序運行的窗口形式如下圖所示
圖
PasswordMaskingDemo
java程序運行窗口
在上述程序中
與文本區回顯控制相關的代碼為
final TextField txtPassword = new TextField(
);
txtPassword
setEchoChar(
*
);
在上面的代碼中
首先創建初始內容為空
可輸入
個字符的TextField對象實例txtPassword後
利用TextField對象中定義的setEchoChar方法設置該文本區的回顯字符為星號
*
從而實現輸入字符的掩碼
因此總結為
可以利用TextField對象中定義的setEchoChar方法
實現AWT組件對象程序中的字符掩碼輸入和回顯控制
利用JSwing組件對象實現密碼屏蔽輸入
JSwing組件對象是輕量級Java組件對象
其中定義了多種組件對象類型
而且其外觀也更加新穎
與AWT組件對象相對應
在JSwing組件對象中也定義了JTextField對象
用於用戶進行文本輸入
那麼
讀者是否會聯想利用對象中也定義的setEchoChar方法定義回顯字符呢?實際情況不是這樣
在JTextField對象中沒有定義該方法
而是以JTextField為父對象
定義了用於進行密碼輸入的文本區對象JPasswordField
該對象的定義繼承結構如下
java
lang
Object
|
+
java
awt
Component
|
+
java
awt
Container
|
+
javax
swing
JComponent
|
+
javax
swing
text
JTextComponent
|
+
javax
swing
JTextField
|
+
javax
swing
JPasswordField
在JPasswordField對象中
定義了多種類型
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26940.html