由 paintcomponent 覆盖的 JPasswordField 文本颜色

JPasswordField text color over written by paintcomponent

所以我制作了自定义的 JPasswordField 组件,并在其中将背景颜色更改为带有 alpha 的颜色

this.setBackground( new Color(29, 29, 29, 150) );
this.setOpaque(false);

而且我还把按钮做成了圆形,所以我需要使用这个:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(getBackground());
    g.fillRoundRect(0, 0, getWidth(), getHeight(), radius, radius);
}

问题是当我输入时我的文字几乎不可读它需要我突出显示它以便我能看到它。

这是我的前景色:

this.setForeground(new Color(250,250,250, 250));

截图后我稍微改变了颜色,但我仍然遇到同样的问题

你的基本逻辑颠倒了。

首先调用 super.paintComponent() 来绘制文本。

然后您调用 fillRoundRect(...),它将在文本上方绘制。

逻辑应该反过来:

  1. 绘制背景
  2. 调用 super.paintComponent(...)