Здравствуйте, дорогие коллеги, пользователи stackoverflow,
Я получил простой хак , где я получаю свои желанные закругленные углы на JTextField
.
Я обнаружил, что могу подкласс JTextFieldи переопределить paintComponent(Graphics g)
В связи с этим я мог бы отредактировать следующее:
- изменить границу от стандартной границы до
BorderFactory.createEmptyBorder()
. - изменить внешний вид натекстовое поле от прямоугольного до круглого прямоугольного.
- изменить смещение для текста, чтобы оно не находилось вблизи круглой границы.(переопределить
getInsets()
)
Теперь я борюсь со следующими проблемами:
- Изменение размера выделения
- Когда ПОЛЬЗОВАТЕЛЬ поменяйте плаф на например Нимбус, тогда взгляд на
subclassed JTextField
испорчен, я имею в виду то, что рутины рисования Нимба предпочтительнее моих.Итак, я получаю смесь Nimbus и моей круглой окраски.
Итак, вкратце, кто-нибудь из вас знает, как я разбираю JTextField
с различными проблемами, написанными выше?
Написан мой пример кода для создания закругленных границ в пользовательском классе JTextField в конструкторе setBorder(BorderFactory.createEmptyBorder())
и setOpaque(false);
:
@ Override
public Insets getInsets ()
{
Insets insets = super.getInsets ();
insets.left + = 10;
возврат вставок;
} @ Переопределение
общедоступные вставки getInsets (Вставки вставок)
{
вернуть вставки;
}
@ Переопределить
public void paintComponent (Graphics 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);
Paint backgroundBrush = new GradientPaint (0,0, новый цвет (0x383838), 0, getHeight (), новый цвет (0xCECECE) .darker ());
Shape 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); * * point ()) * 1067 g) (1067);;
}