您好亲爱的stackoverflow用户,
我有一个简单的技巧,可以在JTextField
上获得想要的圆角。
我发现我可以继承JTextField并覆盖paintComponent(Graphics g)
在这方面,我可以编辑以下内容:
将边框从标准边框更改为BorderFactory.createEmptyBorder()
。
将文本字段的外观从矩形更改为矩形。
更改文本的偏移量,使其不在圆形边框附近。 (覆盖getInsets()
)
现在,我正在解决以下问题:
更改选择大小
当USER时,将标签更改为Nimbus然后破坏了subclassed JTextField
的外观,这意味着我比Nimbus更喜欢Nimbus绘画例程。所以我混合了Nimbus和我的圆形borderpainting。
简而言之,你们中的任何人都知道我如何用上述各种问题来剖析JTextField
吗?
编写的示例代码用于在构造函数setBorder(BorderFactory.createEmptyBorder())
和setOpaque(false);
中的自定义类JTextField中制作圆形边框:
@Override
公共Insets getInsets()
{
插入insets = super.getInsets();
insets.left + = 10;
返回插图;
}
@Override
公共Insets getInsets(Insets insets)
{
返回插图;
}
@Override
公共无效的paintComponent(图形g)
{
Graphics2D g2 = Graphics2D)g.create();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.6f));
RoundRectangle2D.Float r2d =新的RoundRectangle2D.Float(0,0,getWidth(),getHeight(),10,10);
绘制backgroundBrush = new GradientPaint(0,0,new Color(0x383838),0,getHeight(),new Color(0xCECECE).darker());
形状为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);
}
最佳答案
我认为您应该为此创建一个自定义边框。然后,您可以控制插图并在边框中进行绘制,而不是文本字段的paintComponent()方法。
关于java - JTextField上的圆角,并通过不同的PLAF使其一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6052343/