Вопрос

Есть ли в любом случае способ удалить границу в JTextField?

txt = new JTextField();
txt.setBorder(null);   // <-- this has no effect.

Я бы действительно хотел, чтобы это выглядело как JLabel - но мне все еще нужно, чтобы это было JTextField потому что я хочу, чтобы люди могли подчеркнуть это.

Это было полезно?

Решение

Из ответа на ваш предыдущий вопрос вы знаете, что некоторые PL & F могут нарушить границу.

Таким образом, очевидное решение состоит в том, чтобы переопределить setBorder метод, который вызывает PL & F, и отмените изменение.

JTextField text = new JTextField() {
    @Override public void setBorder(Border border) {
        // No!
    }
};

Другие советы

JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());

http://java.sun.com/javase/6/docs/api/javax/swing/BorderFactory.html

Устанавливая границу в 'null', вы фактически указываете внешнему виду использовать собственный стиль границы (операционной системы), если таковой существует.

Попробуйте установить для него значение BorderFactory.createEmptyBorder() вместо null.Иногда это "делает свое дело", потому что установка значения null на самом деле имеет другое значение.

Если это не сработает, вполне возможно, что внешний вид, который вы используете, что-то переопределяет.Вы используете значение по умолчанию или что-то пользовательское?

Нет, вы не можете убрать границу.Особенно в отношении отображения компонентов AWT.Они используют собственный набор виджетов (рисуются вне Java).

Попробуйте сделать линию, похожую на ваш фон...например, если ваш фон белый, то вы должны:

setBorder(BorderFactory.createLineBorder(Color.white));

Затем установите фон на белый:

setBackground(Color.white);
txt.setBorder(new LineBorder(Color.BLACK,0));

может сработать.

Единственный способ заставить его работать при ЛЮБЫХ обстоятельствах - это следующая настройка:

setBorder (BorderFactory.createLineBorder (new Color (0, 0, 0, 0), 2));

в противном случае (когда у вас нулевой фон родительского контейнера) вы увидите, что курсор "I" навсегда останется у левого края вашего JTextField.(Просто проведите несколько тестов для разной толщины границы и обратите внимание на довольно странный способ, которым JTextField помещает курсор, когда вы активируете его в первый раз.)

В качестве альтернативы вы можете установить:

setBorder (BorderFactory.createLineBorder (getBackground (), 2));

но вы получите поле, оптически увеличенное на 2 пикселя во всех четырех направлениях.Если вы не укажете толщину границы, вы увидите, что курсор МЕЖДУ этой границей и полем останется навсегда.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top