package com.quiltplayer.view.swing.textfields;
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;
/*
* A custom TextField UI based on Metal that paints
* text fields with a round border.
*/
public class RoundTextUI extends MetalTextFieldUI {
public static ComponentUI createUI(JComponent c) {
return new RoundTextUI();
}
public void installUI(JComponent c) {
super.installUI(c);
c.setBorder(new RoundBorder());
c.setOpaque(false);
}
protected void paintSafely(Graphics g) {
JComponent c = getComponent();
if (!c.isOpaque()) {
g.setColor(Color.WHITE);
g.fillRoundRect(0, 0, c.getWidth() - 1, c.getHeight() - 1, 20, 20);
}
super.paintSafely(g);
}
private static class RoundBorder extends AbstractBorder {
private static final long serialVersionUID = 1L;
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Color oldColor = g.getColor();
g.setColor(Color.GRAY);
g.drawRoundRect(x, y, width - 1, height - 1, 10, 10);
g.setColor(oldColor);
}
public Insets getBorderInsets(Component c) {
return new Insets(4, 4, 4, 4);
}
public Insets getBorderInsets(Component c, Insets insets) {
insets.left = insets.top = insets.right = insets.bottom = 4;
return insets;
}
}
}