In this blow we are will design the custom JTextFields like:
1. RoundedCorner JTextField,
2. Image Background JTextField
3. JtextField with Hint text.
1. Rounded Corner TextField
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import
javax.swing.JComponent;
import
javax.swing.border.AbstractBorder;
import
javax.swing.plaf.ComponentUI;
import
javax.swing.plaf.metal.MetalTextFieldUI;
public class RoundedCornerTextFieldUI extends MetalTextFieldUI {
    private final static int ARC_WIDTH = 5;
    private final static int ARC_HEIGHT = 5;
    private final static int x = 0;
    private final static int y = 0;
    private final static int BORDER_TOP = 4;
    private final static int BORDER_BOTTOM = 4;
    private final static int BORDER_LEFT = 4;
    private final static int BORDER_RIGHT = 4;
    public static ComponentUI
createUI(JComponent jComponent) {
       return new RoundedCornerTextFieldUI();
    }
    public void installUI(JComponent
jComponent) {
       super.installUI(jComponent);
       jComponent.setBorder(new RoundedBorder());
       jComponent.setOpaque(false);
    }
    protected void paintSafely(Graphics
graphics) {
       JComponent component = getComponent();
       if (!component.isOpaque()) {
          
graphics.setColor(component.getBackground());
          
graphics.fillRoundRect(x, y, component.getWidth()-1, component.getHeight()-1, ARC_WIDTH, ARC_HEIGHT);
       }
       super.paintSafely(graphics);
    }
    private static class RoundedBorder extends AbstractBorder {
       private static final long serialVersionUID = 1L;
       public void
paintBorder(Component coponent, Graphics graphics, int x, int y, int width, int height) {
          
Color oldColor = graphics.getColor();
          
graphics.setColor(Color.gray);
          
graphics.drawRoundRect(x, y, width-1, height-1, ARC_WIDTH, ARC_HEIGHT);
          
graphics.setColor(oldColor);
       }
       public Insets getBorderInsets(Component c) {
          
return new Insets(BORDER_TOP, BORDER_LEFT, BORDER_BOTTOM, BORDER_RIGHT);
       }
    }
}
2. Image Background and Hint Text TextField
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import
java.awt.event.FocusAdapter;
import
java.awt.event.FocusEvent;
import
javax.swing.ImageIcon;
import
javax.swing.JComponent;
import
javax.swing.JTextField;
public class HintBGImageTextField extends JTextField {
    private static final long serialVersionUID = 1L;
    private static final Font focusGainFont = new Font("Courier
New",
Font.PLAIN, 12);
    private static final Font focusLostFont = new Font("Courier
New",
Font.ITALIC, 12);
    private Image img;
    private HintBGImageTextField hintTextField;
    public HintBGImageTextField() {
       hintTextField = this;
    }
   @Override
    public void
paintComponent(Graphics g) {
       g.drawImage(img, 0, 0, this);
       super.paintComponent(g);
    }
    public void
setBackgroundImage(String imPath){
       img = new ImageIcon(imPath).getImage();
       setOpaque(false);
       new JComponent(){
          
private static final long serialVersionUID = 1L;
          
@Override
          
public void
paintComponent(Graphics g) {
              super.paintComponent(g);
          
}
       };
    }
    public void setHint(String hint){
       hintTextField.setText(hint);
       hintTextField.setFont(focusLostFont);
       hintTextField.setForeground(Color.GRAY);
       hintTextField.addFocusListener(new FocusAdapter() {
            @Override
            public void
focusGained(FocusEvent e) {
                if (hintTextField.getText().equals(hint)) {
                    hintTextField.setText("");
                } else {
                    hintTextField.setText(getText());
                }
                hintTextField.setFont(focusGainFont);
                hintTextField.setForeground(Color.BLACK);
            }
            @Override
            public void focusLost(FocusEvent
e) {
                if ( hintTextField.getText().equals(hint) ||
getText().length() == 0) {
                    hintTextField.setText(hint);
                    hintTextField.setFont(focusLostFont);
                    hintTextField.setForeground(Color.GRAY);
                } else {
                    hintTextField.setText(getText());
                    hintTextField.setFont(focusGainFont);
                    hintTextField.setForeground(Color.BLACK);
                }
            }
        });
    }
}
3. Main Class
import javax.swing.JFrame;
import
javax.swing.JTextField;
public class Main extends JFrame {
    public Main(){
       setDefaultCloseOperation(3);
       setSize(400, 350);
       setLayout(null); 
       JTextField field = new JTextField();
       field.setBounds(5,35,200,25);
       field.setUI(new RoundedCornerTextFieldUI());
       add(field);
       HintBGImageTextField hintTextField  = new HintBGImageTextField();
       hintTextField.setBounds(5,65,200,25);
       hintTextField.setBackgroundImage("resources/textfield.png"); 
       hintTextField.setHint("Search..."); 
       add(hintTextField);
       setVisible(true);
       setResizable(false);
    }
    public static void main(String[] args) {
       Main main = new Main();
       main.setVisible(true);
    }
}
Image Folder path and Image
Output:


