******** 在线等待,关于JPasswordField的,解决问题后立即给分 ******* JPasswordField a = new JPasswordField(); a.setEchoChar('*'); a.setText("pass"); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JPasswordField中显示的就是******啊,不显示实际字符啊,不知道你问的是什么意思 这样吧,你自己写一个TextField,如果遇到不是“,”的符号就显示为“*”如果遇到“,”就直接显示出来 JPasswordField jpf=new JPasswordField();jpf.setText(password1);这样显示的就是“**********”啊 to XKP(低等下人):非常感谢!我也是这样想的, 从JTextField派生一个类,但不知道怎样实现这样的功能,应该覆盖哪个函数呢? 哦,这个意思啊,那就是做一个YourJTextField类扩展JTextField,然后添加一个成员变量,例如value,是String类型,然后添加一个getValue()方法,这个方法是返回value字符串,再做一个setValue()方法,是对value字符串设置,然后对这个类的对象添加DocumentListener监听器,在他的insertUpdate和changedUpdate和removeUpdate函数中写把功能,就是把不是,的字符都替换为*,但是记住在增加删除之前先使用setValue()把value的内容记下来,这个你在getValue()的时候才能取得正确的内容 to geyf(我在学java) :我是有一组口令,所以我要以豆号隔开.即: 除逗号以外的其它字符显示为'*'********,********,******* 这样吧,比如你的TextField是这样添加的 JTextField jtf = new JTextField( ); getContentPane().add( jtf );那么你就增加一句 jtf.setDocument( new MyDocument() );然后找个地方增加一个自己的类 class MyDocument extends PlainDocument{ public void insertString( int offset, String s, AttributeSet attributeSet ) throws BadLocationException{ // System.out.println( s ); String newS = s.replaceAll( "[^,]", "*" ); // System.out.println( newS ); super.insertString( offset, newS, attributeSet ); } }这样就可以了你可以试试看·········import javax.swing.text.*;在开头加入这一句 to XKP(低等下人) :这样能得到真实的值吗? 你要在什么地方得到阿?String newS = s.replaceAll( "[^,]", "*" );这里面的 s 就是你原来真实的值了如果你要在JTextField里面用到这个值那么你就在MyDocument的构造函数里面传递这个jtf的引用然后再MyDocument里面某个地方保存这个 s 明白了? to XKP(低等下人) :我明白你的意思,但你这样一来JTextField.getText()的值也被替换了.要想JPasswordField一样,只是显示时要求"把不是;的字符显示为*你这样做相当是"字符的替换" JPasswordField默认显示的字符就是'*',但可以通过方法setEchoChar()进行设置 我急需, 谁能写一个这样的class奉上400分!要求的功能如上.谢谢帮忙!!! 昨天我简单做了一下,的确不是那么简单的事,呵呵,关键是在哪做变换,首先不能在DocumentListener里做,而又不能在CaretListener里做,那只有在他的视图里做,JTextPane用的视图是PlainView,JTextField用的是什么我就不记得了,原来书上写过,你查查。你可以在覆盖view的drawUnselectedText和drawSelectedText两个方法,就是在这里面做变换,当然,在变化前要把直给一个全局变量,使能获得正确的直。大概说一个方向,你做做试试 to: teaky2002(种田硬手) 我们的前提是密码中不存在这个字符,当然不一定是豆号. 所以这个可以不考虑.关键是遇到这个"分隔符" 就不显示为*******,******,**** import javax.swing.*;import javax.swing.event.*;import javax.swing.tree.*;import javax.swing.text.*;import java.awt.*;import java.awt.event.*;public class Test extends JFrame { MyTextField jtf; public Test() { jtf = new MyTextField( ); getContentPane().add( jtf ); } public static void main(String args[]) { GraphicJavaApplication.launch(new Test(), "Vetoing Node Expansion/Collapse",300,300,300,200); }}class MyTextField extends JTextField{ MyDocument myDoc; public MyTextField(){ myDoc = new MyDocument(); this.setDocument( myDoc ); } public String getText(){ return myDoc.getText(); } class MyDocument extends PlainDocument{ private String fieldText = ""; public void insertString( int offset, String s, AttributeSet attributeSet ) throws BadLocationException{ // System.out.println( s ); fieldText += s; String newS = s.replaceAll( "[^,]", "*" ); // System.out.println( newS ); super.insertString( offset, newS, attributeSet ); System.out.println( MyTextField.this.getText() ); } public String getText(){ return fieldText; } } } class GraphicJavaApplication extends WindowAdapter { public static void launch(final JFrame f, String title, final int x, final int y, final int w, int h) { f.setTitle(title); f.setBounds(x,y,w,h); f.setVisible(true); f.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE); f.addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent e) { System.exit(0); } }); }} 试试看这个把System.out.println( MyTextField.this.getText() );这一句是用来测试用的,没什么意义public String getText(){ return myDoc.getText(); }这个就是得到TextField里面原来的值,我覆盖掉了 sorry, 一直忙,才来!to : XKP(低等下人) 你这样行吗? 用户可以backspace delete insert字符.显然你这样处理不对, 你只考虑字符一直追加 这样说吧,你要的效果我不可能帮你全作了,甚至你前面的一个说因为你说的这个和上一个要求都只是在程序里面改一点东西而已如果他按的是back的话,你就自己处理一下了,判断一下是否原来已经有String,如果有,就删掉最后面一个,我敢说,我做出来的东西肯定不可能所有的东西都考虑到了,主要也就是给个类似例子的意思如果说到用户可能的按键的话,那么用户可能的按键有特殊意义的还很多比如有些特殊字符的话,也是要自己处理的。 顺便说一下document里面有一个方法是这样的public void remove(int offs, int len) throws BadLocationException你自己覆盖掉他吧,也就是你说的删除的意思了,至于其他的代码我也不想写了。 短信猫 发短信时 出现乱码 Netbeans开发数据库GUI程序,运行速度特别慢的问题 遇到个有意思的问题,看看你想到答案了没有·· 一道面试题,三个式子哪个运行更快? swing两个初级问题 帮忙推荐一本java图像处理的书啊!!50分! API的解析 Linux下java的环境变量java.library.path的配置问题,基础!! 从文件中读取所有的学生对象,怎么搞?求救。我的代码如下 请问!!(急) 请问谁有关于JNI的资料,最好是关于VC的 高分求救,SimpleDateFormat.parse()方法出错?
TextField,如果遇到不是“,”的符号就显示为
“*”如果遇到“,”就直接显示出来
这样显示的就是“**********”啊
我是有一组口令,所以我要以豆号隔开.即: 除逗号以外的其它字符显示为'*'********,********,*******
JTextField jtf = new JTextField( );
getContentPane().add( jtf );
那么你就增加一句
jtf.setDocument( new MyDocument() );然后找个地方增加一个自己的类
class MyDocument extends PlainDocument{
public void insertString( int offset, String s, AttributeSet attributeSet ) throws BadLocationException{
// System.out.println( s );
String newS = s.replaceAll( "[^,]", "*" );
// System.out.println( newS );
super.insertString( offset, newS, attributeSet );
}
}这样就可以了
你可以试试看·········import javax.swing.text.*;
在开头加入这一句
String newS = s.replaceAll( "[^,]", "*" );
这里面的 s 就是你原来真实的值了
如果你要在JTextField里面用到这个值
那么你就在MyDocument的构造函数里面传递这个jtf的引用
然后再MyDocument里面某个地方保存这个 s 明白了?
我明白你的意思,但你这样一来JTextField.getText()的值也被替换了.
要想JPasswordField一样,只是显示时要求"把不是;的字符显示为*
你这样做相当是"字符的替换"
要求的功能如上.
谢谢帮忙!!!
关键是遇到这个"分隔符" 就不显示为*
******,******,****
import javax.swing.event.*;
import javax.swing.tree.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;public class Test extends JFrame {
MyTextField jtf;
public Test() {
jtf = new MyTextField( );
getContentPane().add( jtf );
}
public static void main(String args[]) {
GraphicJavaApplication.launch(new Test(),
"Vetoing Node Expansion/Collapse",300,300,300,200);
}
}class MyTextField extends JTextField{
MyDocument myDoc;
public MyTextField(){
myDoc = new MyDocument();
this.setDocument( myDoc );
}
public String getText(){
return myDoc.getText();
}
class MyDocument extends PlainDocument{
private String fieldText = "";
public void insertString( int offset, String s, AttributeSet attributeSet ) throws BadLocationException{
// System.out.println( s );
fieldText += s;
String newS = s.replaceAll( "[^,]", "*" );
// System.out.println( newS );
super.insertString( offset, newS, attributeSet );
System.out.println( MyTextField.this.getText() );
}
public String getText(){
return fieldText;
}
}
} class GraphicJavaApplication extends WindowAdapter {
public static void launch(final JFrame f, String title,
final int x, final int y,
final int w, int h) {
f.setTitle(title);
f.setBounds(x,y,w,h);
f.setVisible(true); f.setDefaultCloseOperation(
WindowConstants.DISPOSE_ON_CLOSE); f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
}
}
System.out.println( MyTextField.this.getText() );
这一句是用来测试用的,没什么意义public String getText(){
return myDoc.getText();
}
这个就是得到TextField里面原来的值,我覆盖掉了
因为你说的这个和上一个要求都只是在程序里面改一点东西而已
如果他按的是back的话,你就自己处理一下了,判断一下是否原来已经有
String,如果有,就删掉最后面一个,我敢说,我做出来的东西肯定不可能
所有的东西都考虑到了,主要也就是给个类似例子的意思
如果说到用户可能的按键的话,那么用户可能的按键有特殊意义的还很多
比如有些特殊字符的话,也是要自己处理的。
document里面有一个方法是这样的public void remove(int offs,
int len)
throws BadLocationException你自己覆盖掉他吧,也就是你说的删除的意思了,至于其他的代码
我也不想写了。