Как сохранить выделенную границу JComponent, когда установлена ​​пользовательская граница - PullRequest
2 голосов
/ 07 июня 2010

У меня есть JTextField, где я установил несколько пользовательских свойств:

nameField.setPreferredSize(new Dimension(275,40));
nameField.setBackground(bgColor);
nameField.setForeground(txtColor);
nameField.setFont(new Font("HelveticaNeue",Font.PLAIN,22));
nameField.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2));

Когда компонент имеет фокус, вокруг поля подсветка не отображается. На Mac это обычно синий светящийся прямоугольник, указывающий, что этот компонент имеет фокус.

Если я закомментирую nameField.setBorder (...), подсветка появится снова. Как сохранить выделение, а также мою пользовательскую границу!?

По сути, я просто хочу, чтобы рамка подсветки показывала, когда компонент имеет фокус, и не имела границы, когда компонент не сфокусирован.

Обратите внимание, что исходная рамка имеет тип com.apple.laf.AquaTextFieldBorder.

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

По сути, я просто хочу, чтобы выделенная граница отображалась, когда компонент имеет фокус, и не имела границы, когда компонент не сфокусирован.

Вам необходимо использовать FocusListener.Сначала вам нужно сохранить текущую границу.Затем в focusLost вы устанавливаете границу в NULL, а в focusGained вы используете сохраненную границу.

Или вы можете получить границу по умолчанию для компонента с помощью UIManager.

1 голос
/ 07 июня 2010

Вы можете сделать это с помощью CompoundBorder.

Под Windows с внешним видом Nimbus я могу воспроизвести проблему. Я могу получить обе границы для отображения со следующим кодом:

  Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2);
  Border originalBorder = nameField.getBorder();
  CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder);
  nameField.setBorder(compoundBorder);
...