亲爱的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))
在文本字段类上清除了它。 我认为即使您声明小部件不透明,它也不会使背景不透明。