JTextField上的圆角,使其在不同的PLAF中保持一致



亲爱的stackoverflow用户,你好,

有一个简单的技巧,我在JTextField .
上得到了我长期想要的圆角我发现我可以对 JTextField 进行子类化并覆盖paintComponent(Graphics g)

在这方面,我可以编辑以下内容:

  • 将边框从标准边框更改为 BorderFactory.createEmptyBorder()
  • 将文本字段的外观从矩形更改为圆形矩形。
  • 更改文本的偏移量,使其不靠近圆形边框。(覆盖getInsets()

现在我正在与以下问题作斗争:

  • 更改选择大小
  • 当用户将 plaf 更改为例如 Nimbus 时,subclassed JTextField上的外观就会被破坏,我的意思是 Nimbus 绘画套路比我的更受欢迎。 所以我混合了雨云和我的圆形边框绘画。

简而言之,你们中有谁知道我如何用上面写的各种问题来剖析JTextField

编写的是我的示例代码,用于在构造函数setBorder(BorderFactory.createEmptyBorder())setOpaque(false);中的自定义类 JTextField 中创建圆角边框:

@Override
public Insets getInsets() {
    Insets insets = super.getInsets();
    insets.left += 10;
    return insets;
}
@Override
public Insets getInsets(Insets insets) {
    return insets;
}
@Override
public void paintComponent(Graphics g) {
    Graphics2D g2 = Graphics2D)g.create();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.6f));
    RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(0, 0, getWidth(), getHeight(), 10, 10);
    Paint backgroundBrush = new GradientPaint(0, 0, new Color(0x383838), 0, getHeight(), new Color(0xCECECE).darker());
    Shape oldClip = g2.getClip();
    g2.setPaint(backgroundBrush);
    g2.clip(r2d);
    g2.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
    g2.setClip(oldClip);
    g2.setColor(Color.black);
    g2.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
    g2.dispose();
    super.paintComponent(g);
}

我认为您应该为此创建自定义边框。然后,您可以控制插图并在 Border 中进行绘画,而不是文本字段的 paintComponent() 方法。

我遇到了同样的问题,发现打电话

setBackground(new Color(0,0,0,0))

在文本字段类上清除了它。 我认为即使您声明小部件不透明,它也不会使背景不透明。

相关内容

  • 没有找到相关文章

最新更新