您好亲爱的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/

10-10 01:34