Java JTextField上的圆角,通过不同的plaf使其一致

Java JTextField上的圆角,通过不同的plaf使其一致,java,swing,user-interface,jtextfield,border,Java,Swing,User Interface,Jtextfield,Border,亲爱的stackoverflow用户朋友们,大家好 我得到了一个简单的技巧,在JTextField上获得了我长期以来想要的圆角 我发现我可以将JTextField子类化并覆盖paintComponent(Graphics g) 在这方面,我可以编辑以下内容: 将边框从标准边框更改为BorderFactory.createEmptyByOrder() 将文本字段的外观从矩形更改为圆形矩形 更改文本的偏移,使其不靠近圆形边框。(覆盖getInsets()) 现在,我正在与以下问题作斗争: 更改

亲爱的stackoverflow用户朋友们,大家好

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

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

  • 将边框从标准边框更改为
    BorderFactory.createEmptyByOrder()
  • 将文本字段的外观从矩形更改为圆形矩形
  • 更改文本的偏移,使其不靠近圆形边框。(覆盖
    getInsets()
现在,我正在与以下问题作斗争:

  • 更改选择大小
  • 当用户将plaf更改为例如Nimbus时,
    子类JTextField
    的外观就会被破坏,我的意思是,Nimbus绘制例程比我的更受欢迎。所以我混合了灵气和我的圆边画
简而言之,你们有谁知道我是如何用上面写的各种问题剖析
JTextField

这是我编写的示例代码,用于在构造函数
setboorder(BorderFactory.createEmptyBorder())
setOpaque(false)中的自定义类JTextField中生成圆角边框

@覆盖
公共插入getInsets()
{
Insets Insets=super.getInsets();
插图左+=10;
返回插图;
} @覆盖
公共插图获取插图(插图插图)
{
返回插图;
}
@覆盖
公共组件(图形g)
{
Graphics2D g2=Graphics2D)g.创建();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.6f));
RoundRectangle2D.Float r2d=新的RoundRectangle2D.Float(0,0,getWidth(),getHeight(),10,10);
Paint backgroundBrush=new GradientPaint(0,0,新颜色(0x3838),0,getHeight(),新颜色(0xcececece).darker();
Shape oldClip=g2.getClip();
g2.setPaint(背景画笔);
g2.剪辑(r2d);
g2.fillRect(0,0,getWidth()-1,getHeight()-1);
g2.设置剪辑(旧剪辑);
g2.设置颜色(颜色.黑色);
g2.drawRoundRect(0,0,getWidth()-1,getHeight()-1,10,10);
g2.setRenderingHint(RenderingHits.KEY_ANTIALIASING,RenderingHits.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHits.KEY_STROKE_控件,RenderingHits.VALUE_STROKE_PURE);
g2.dispose();
super.paintComponent(g);
}


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

我也遇到了同样的问题,并发现调用

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

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

这比我想象的要好!使用边框时,您无法控制JTextField内的白色背景,至少不能控制我的背景knowledge@user616693,这是通过使用textField.setBackground()完成的。