JPasswordField a = new JPasswordField();
  a.setEchoChar('*');
  a.setText("pass");

解决方案 »

  1.   

    JPasswordField中显示的就是******啊,不显示实际字符啊,不知道你问的是什么意思
      

  2.   

    这样吧,你自己写一个
    TextField,如果遇到不是“,”的符号就显示为
    “*”如果遇到“,”就直接显示出来
      

  3.   

    JPasswordField jpf=new JPasswordField();jpf.setText(password1);
    这样显示的就是“**********”啊
      

  4.   

    to XKP(低等下人):非常感谢!我也是这样想的, 从JTextField派生一个类,但不知道怎样实现这样的功能,应该覆盖哪个函数呢?
      

  5.   

    哦,这个意思啊,那就是做一个YourJTextField类扩展JTextField,然后添加一个成员变量,例如value,是String类型,然后添加一个getValue()方法,这个方法是返回value字符串,再做一个setValue()方法,是对value字符串设置,然后对这个类的对象添加DocumentListener监听器,在他的insertUpdate和changedUpdate和removeUpdate函数中写把功能,就是把不是,的字符都替换为*,但是记住在增加删除之前先使用setValue()把value的内容记下来,这个你在getValue()的时候才能取得正确的内容
      

  6.   

    to geyf(我在学java) :
    我是有一组口令,所以我要以豆号隔开.即: 除逗号以外的其它字符显示为'*'********,********,*******
      

  7.   

    这样吧,比如你的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.*;
    在开头加入这一句
      

  8.   

    to  XKP(低等下人) :这样能得到真实的值吗?
      

  9.   

    你要在什么地方得到阿?
    String newS = s.replaceAll( "[^,]", "*" );
    这里面的  s  就是你原来真实的值了
    如果你要在JTextField里面用到这个值
    那么你就在MyDocument的构造函数里面传递这个jtf的引用
    然后再MyDocument里面某个地方保存这个  s  明白了?
      

  10.   

    to  XKP(低等下人) :
    我明白你的意思,但你这样一来JTextField.getText()的值也被替换了.
    要想JPasswordField一样,只是显示时要求"把不是;的字符显示为*
    你这样做相当是"字符的替换"
      

  11.   

    JPasswordField默认显示的字符就是'*',但可以通过方法setEchoChar()进行设置
      

  12.   

    我急需, 谁能写一个这样的class奉上400分!
    要求的功能如上.
    谢谢帮忙!!!
      

  13.   

    昨天我简单做了一下,的确不是那么简单的事,呵呵,关键是在哪做变换,首先不能在DocumentListener里做,而又不能在CaretListener里做,那只有在他的视图里做,JTextPane用的视图是PlainView,JTextField用的是什么我就不记得了,原来书上写过,你查查。你可以在覆盖view的drawUnselectedText和drawSelectedText两个方法,就是在这里面做变换,当然,在变化前要把直给一个全局变量,使能获得正确的直。大概说一个方向,你做做试试
      

  14.   

    to: teaky2002(种田硬手) 我们的前提是密码中不存在这个字符,当然不一定是豆号. 所以这个可以不考虑.
    关键是遇到这个"分隔符" 就不显示为*
    ******,******,****
      

  15.   

    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);
    }
    });
    }
    }
      

  16.   

    试试看这个把
    System.out.println( MyTextField.this.getText() );
    这一句是用来测试用的,没什么意义public String getText(){
        return myDoc.getText();
      }
    这个就是得到TextField里面原来的值,我覆盖掉了
      

  17.   

    sorry, 一直忙,才来!to : XKP(低等下人) 你这样行吗? 用户可以backspace delete insert字符.显然你这样处理不对, 你只考虑字符一直追加
      

  18.   

    这样说吧,你要的效果我不可能帮你全作了,甚至你前面的一个说
    因为你说的这个和上一个要求都只是在程序里面改一点东西而已
    如果他按的是back的话,你就自己处理一下了,判断一下是否原来已经有
    String,如果有,就删掉最后面一个,我敢说,我做出来的东西肯定不可能
    所有的东西都考虑到了,主要也就是给个类似例子的意思
    如果说到用户可能的按键的话,那么用户可能的按键有特殊意义的还很多
    比如有些特殊字符的话,也是要自己处理的。
      

  19.   

    顺便说一下
    document里面有一个方法是这样的public void remove(int offs,
                       int len)
                throws BadLocationException你自己覆盖掉他吧,也就是你说的删除的意思了,至于其他的代码
    我也不想写了。