Подтвердить что ты не робот

Swing JTextField как удалить границу?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

setBackground(Color.white);

Ответ 5

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

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

Ответ 6

Единственный способ заставить его работать во всех обстоятельствах - это следующий параметр:

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

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

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

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

но вы получите поле оптическое больше на 2 пикселя во всех четырех направлениях. Если вы не укажете толщину границы, вы увидите курсор BETWEEN этой границы и поле, оставшееся навсегда.