我从来没有想过,只有我使用getPassword返回字符数组的方法,我看到该getText方法已被弃用.但是现在我想,为什么这种方法被弃用了?
Java文档说明:
不推荐.从Java 2平台v1.2开始,取而代之
getPassword.获取组件表示的部分文本.如果length为0,则返回空字符串.
出于安全原因,不推荐使用此方法.请改用该
getPassword方法.
但那些安全原因是什么?有关于此的任何想法?
先感谢您.
我试图找到实际呈现JPassword字段的方法.也许渲染不是正确的词,所以这是交易:
我试图让JPassword字段显示不同数量的字符,而不是与我输入的实际密码长度相同.例如,如果我输入密码123456和setEchoChar((字符)值)为"#"
密码将显示如下:######
我希望能够生成随机数量的星星以显示:##########
如果数字为10,例如.(当然没有空格)
我能够通过添加几个侦听器来检测更改,然后获取文本并用我创建的掩码替换它,但这不能令人满意,我希望能够改变实际对象的行为.一点挑战不会伤害,对吗?:)我准备好任何建议.谢谢.
我试图在Java Swing(Netbeans)中更改JPasswordField的背景颜色.
这就是我所拥有的:
private void pstxtPasswordKeyPressed(java.awt.event.KeyEvent evt) {
//Get string from password box
userPassword = new String(pstxtPassword.getPassword());
//If password is 8+ characters
//(one less because string counting begins at 0)
if (userPassword.length() >= 7) {
//Set password input box background color to green
pstxtPassword.setBackground(Color.green);
}
else { //If password is less than 8 characters
//Set password input box background color to red
pstxtPassword.setBackground(Color.red);
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,除非我退格.键入8个以上字符后退格时,颜色不会变回红色,直到字段中只剩下5个字符.
帮助将不胜感激,我是java编程和Netbeans的新手.
编辑:我改变了我的代码,
//If password is 8+ characters
if ((pstxtPassword.getPassword()).length >= 8) {
//Set password …Run Code Online (Sandbox Code Playgroud) 我JPasswordField在我的程序中使用了一个.当我问getPassword(),我得到一个char[]数组.但是,当我添加ActionListener的JPasswordField,问getActionCommand(),我得到的密码作为String.此密码是否在事件对象中保存为String?这不是一个安全问题吗?
我注意到我无法剪切和复制JPasswordField?现在如何将选定的密码部分复制/剪切到剪贴板?有没有办法做到这一点?
这可能看起来微不足道,但我无法弄清楚如何在此对话框焦点中给出密码框.
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
public class PasswordBox {
@SuppressWarnings("unused")
public String prompt() {
JPasswordField pass = new JPasswordField(10);
int action = JOptionPane.showConfirmDialog(null, pass,"Enter Password",JOptionPane.OK_CANCEL_OPTION);
return new String(pass.getPassword());
}
}
Run Code Online (Sandbox Code Playgroud)
我从其他类调用它: String tmpPASS = new PasswordBox().prompt();
出于某种原因,当对话框出现时,"确定"按钮会获得焦点.
stacktrace(参见Eng.Fouad的回答):
at javax.swing.JComponent.addNotify(Unknown Source)
at PasswordBox$1.addNotify(PasswordBox.java:14)
at java.awt.Container.addNotify(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 自 Java 1.2 以来,JPasswordField.getText()“出于安全原因”已被弃用,鼓励使用getPassword()“为了更安全”的方法。
但是,JPasswordField通过分析堆转储 ( JPasswordField instance -> model -> s -> array) ,我至少能够获得存储在 Oracle JRE 1.7 中的密码。
那么如何JPasswordField.getPassword()帮助保护密码呢?
Java JPasswordField正在编码用户在密码字段中输入的输入,我不想要它.我正在检查密码数据库值是纯数字值.
输入密码的数值为
12345
Run Code Online (Sandbox Code Playgroud)
然后它回来了
[C@1e9b48b
Run Code Online (Sandbox Code Playgroud) 我正在 JTable 中创建一个密码列。
我可以使用以下代码将单元格编辑器更改为密码编辑器:
JPasswordField pwf = new JPasswordField();
DefaultCellEditor editor = new DefaultCellEditor(pwf);
jTable1.getColumnModel().getColumn(3).setCellEditor(editor);
Run Code Online (Sandbox Code Playgroud)
我无法找出正确的解决方案来使用与 JPassword 控件相同的行为来渲染密码字段内容。默认情况下,它渲染输入的文本并显示它。如何覆盖它,以便渲染器仅渲染显示与输入的密码长度相同的“*”或黑点。
谢谢,钱德拉
更新 1:目前我正在使用下面给出的密码字段渲染器:
class PasswordCellRenderer extends JPasswordField
implements TableCellRenderer {
public PasswordCellRenderer() {
super();
// This displays astericks in fields since it is a password.
// It does not affect the actual value of the cell.
this.setText("filler123");
}
public Component getTableCellRendererComponent(
JTable arg0,
Object arg1,
boolean arg2,
boolean arg3,
int arg4,
int arg5) {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令调用上面的渲染器:
jTableJDBCPools.getColumnModel().getColumn(3).setCellRenderer(new PasswordCellRenderer());
Run Code Online (Sandbox Code Playgroud)
即使密码字段为空,此渲染器也会进行屏蔽。因此,用户很难确定密码单元格是空的还是已填充的(因为它总是显示一些隐藏的内容)。 …
我的JTable有一个密码字段编辑器.我想在用户单击编辑另一个字段时,如果文本长度小于8位,则显示错误消息.我尝试过焦点听众.但它不起作用.请帮帮我,因为我刚刚开始使用java swing.
class PasswordEditor extends DefaultCellEditor
{
TextBox m_passWord = new TextBox();
public PasswordEditor() {
super(new TextBox());
}
@Override
public Object getCellEditorValue() {
return this.m_passWord.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
Object fieldValue = value;
if(null == fieldValue)
fieldValue = Constants.EMPTY_STRING;
this.m_passWord.addInputMethodListener(new InputMethodListener() {
@Override
public void inputMethodTextChanged(InputMethodEvent event)
{
// TODO Auto-generated method stub
}
@Override
public void caretPositionChanged(InputMethodEvent event)
{
// TODO Auto-generated method stub
}
})
this.m_passWord.addFocusListener(new FocusListener() …Run Code Online (Sandbox Code Playgroud) jpasswordfield ×10
swing ×10
java ×9
jtable ×2
passwords ×2
security ×2
joptionpane ×1
netbeans ×1