Изменение цвета границы AWT TextField

В приложении AWT мне нужно установить цвет границы TextField.

В JTextField я знаю, что мы можем сделать следующее

JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createLineBorder(Color.decode("#2C6791")));

Но метод setBorder() недоступен в awt TextField. Есть ли способ обхода проблемы?

Ответ 1

AWT TextField не поддерживает границы, как вы уже нашли. Вы можете эмулировать границу, поместив текстовое поле внутри Panel, которое немного больше текстового поля и меняет цвет фона панели.

Ответ 2

Для совместимости с изменениями внешнего вида, setBorder() API рекомендует следующее: "В общем, если вы хотите установить границу на стандартном компоненте Swing, отличном от JPanel или JLabel, мы рекомендуем поместить компонент в JPanel и установить границу на JPanel."

Добавление: Хотя это предполагает подход, это не имеет отношения к чистым приложениям AWT.

Ответ 3

tf.setBorder(new LineBorder(Color.red,1));
//new LineBorder(color,width);

Ответ 4

tf.setBorder(new LineBorder(Color.red,1));
//new LineBorder(color,width);

Поскольку метод перегружен, вы можете определить цвет, а остальное оставить по умолчанию. Кроме того, вы можете определить весь метод и выбрать цвет, толщину линии и тип углов; округлено или нет.

    public LineBorder(Color color) {
        this(color, 1, false);
    }
    public LineBorder(Color color, int thickness)  {
        this(color, thickness, false);
    }
    @ConstructorProperties({"lineColor", "thickness", "roundedCorners"})
    public LineBorder(Color color, int thickness, boolean roundedCorners)  {
        lineColor = color;
        this.thickness = thickness;
        this.roundedCorners = roundedCorners;
    }