Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JPasswordField中的密码字符替换为点_Java_Swing_Character_Look And Feel_Jpasswordfield - Fatal编程技术网

Java 将JPasswordField中的密码字符替换为点

Java 将JPasswordField中的密码字符替换为点,java,swing,character,look-and-feel,jpasswordfield,Java,Swing,Character,Look And Feel,Jpasswordfield,JPasswordField的默认密码符号是点 但这将被带星号的Java外观所取代 加载外观后,有没有办法再次将此符号替换回圆点? 我已经知道,在加载Look-and-Feel代码之前初始化或创建JFrame对象可以做到这一点,因此请建议使用类似setEchoChar(char c) 使用如何 setEchoChar('\u25CF') 或者重写PasswordView#drawerchocharacter(…)方法来绘制自定义形状: 下面是一个以Unicode格式显示的黑点列表

JPasswordField
的默认密码符号是点

但这将被带星号的Java外观所取代

加载外观后,有没有办法再次将此符号替换回圆点?

我已经知道,在加载Look-and-Feel代码之前初始化或创建
JFrame
对象可以做到这一点,因此请建议使用类似
setEchoChar(char c)

  • 使用如何
    • setEchoChar('\u25CF')
  • 或者重写
    PasswordView#drawerchocharacter(…)
    方法来绘制自定义形状:


下面是一个以Unicode格式显示的黑点列表

  • -黑圈
  • -黑色圆圈用于记录
  • -中黑色圆圈
  • -黑色大圆圈
  • 和#10733-带向下箭头的黑色圆圈
  • 和#128900-黑色稍小的圆圈
  • -项目符号
  • 和#8729-项目符号运算符
  • -点运算符
  • 和#127761-新月符号
另见

setEchoChar(“·”)
。@Reimeus实际点(.)太小。。。原来的那个更大,看起来也不错。。无论如何,谢谢。。。。
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
import javax.swing.text.*;

public class PasswordCharacterTest {
  public JComponent makeUI() {
    //@see com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java
    //"PasswordField.echoChar", new XPValue(new Character((char)0x25CF), new Character('*')),
    JPasswordField pf1 = new JPasswordField(24);
    pf1.setEchoChar('\u25CF');
    JPasswordField pf2 = new JPasswordField(24) {
      @Override public void updateUI() {
        super.updateUI();
        setUI(MyPasswordFieldUI.createUI(this));
      }
    };
    JPanel p = new JPanel();
    p.add(pf1);
    p.add(pf2);
    p.setBorder(BorderFactory.createEmptyBorder(20, 5, 10, 5));
    return p;
  }
  public static void main(String... args) {
    EventQueue.invokeLater(() -> {
      JFrame f = new JFrame();
      f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.getContentPane().add(new PasswordCharacterTest().makeUI());
      f.setSize(320, 240);
      f.setResizable(false);
      f.setLocationRelativeTo(null);
      f.setVisible(true);
    });
  }
}

class MyPasswordFieldUI extends BasicPasswordFieldUI {
  public static MyPasswordFieldUI createUI(JPasswordField c) {
    //TEST: c.setEchoChar('W');
    c.setEchoChar('O');
    return new MyPasswordFieldUI();
  }
  @Override public View create(Element elem) {
    return new MyPasswordView(elem);
  }
  private static class MyPasswordView extends PasswordView {
    @Override protected int drawEchoCharacter(Graphics g, int x, int y, char c) {
      Graphics2D g2 = (Graphics2D) g.create();
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                          RenderingHints.VALUE_ANTIALIAS_ON);
      FontMetrics fm = g2.getFontMetrics();
      int r = fm.charWidth(c) - 2;
      g2.setPaint(Color.RED);
      g2.fillOval(x + 1, y + 3 - fm.getAscent(), r, r);
      g2.dispose();
      return x + fm.charWidth(c);
    }
    protected MyPasswordView(Element element) {
      super(element);
    }
  }
}