如何在 Java 中实现一个圆角的 JTextField?


JTextField JTextComponent 类的子类,它是最重要的组件之一,允许用户以 单行格式输入文本值。当我们尝试在 JTextField 类中输入一些内容时,它会生成一个 ActionListener 接口。JTextField 类的重要方法有 setText()、getText()、 setEnabled() 等等。默认情况下,一个 JTextfield 是一个矩形形状,我们还可以使用 RoundRectangle2D 类实现一个 圆形 JTextField,需要重写 paintComponent() 方法。

示例

import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class RoundedJTextFieldTest extends JFrame {
   private JTextField tf;
   public RoundedJTextFieldTest() {
      setTitle("RoundedJTextField Test");
      setLayout(new BorderLayout());
      tf = new RoundedJTextField(15);
      add(tf, BorderLayout.NORTH);
      setSize(375, 250);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   public static void main(String args[]) {
      new RoundedJTextFieldTest();
   }
}
// implement a round-shaped JTextField
class RoundedJTextField extends JTextField {
   private Shape shape;
   public RoundedJTextField(int size) {
   super(size);
   setOpaque(false);
}
protected void paintComponent(Graphics g) {
   g.setColor(getBackground());
   g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15);
   super.paintComponent(g);
}
protected void paintBorder(Graphics g) {
   g.setColor(getForeground());
   g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 15, 15);
}
public boolean contains(int x, int y) {
   if (shape == null || !shape.getBounds().equals(getBounds())) {
      shape = new RoundRectangle2D.Float(0, 0, getWidth()-1, getHeight()-1, 15, 15);
   }
   return shape.contains(x, y);
   }
}

结果

更新于: 2020-02-10

2K+ 浏览

开启你的职业生涯

完成课程,获得认证

开始吧
广告