Качайте JTextField, как убрать границу? - PullRequest
20 голосов
/ 17 февраля 2010

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

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

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

Ответы [ 6 ]

60 голосов
/ 17 февраля 2010
JTextField textField = new JTextField();
textField.setBorder(javax.swing.BorderFactory.createEmptyBorder());

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

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

17 голосов
/ 17 февраля 2010

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

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

JTextField text = new JTextField() {
    @Override public void setBorder(Border border) {
        // No!
    }
};
3 голосов
/ 17 февраля 2010

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

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

2 голосов
/ 25 августа 2011

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

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

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

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

setBackground(Color.white);
1 голос
/ 03 февраля 2013
txt.setBorder(new LineBorder(Color.BLACK,0));

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

0 голосов
/ 10 марта 2012

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

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

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

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

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

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

...