设置自定义边框时如何保持 JComponent 的突出显示边框

发布于 2024-09-04 19:29:45 字数 563 浏览 5 评论 0原文

我有一个 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

I have a JTextField, where I've set some custom properties:

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));

When the component has focus, there is no highlight shown around the field. On a Mac, it is usually a blue glowing rectangle, indicating that this component has focus.

If I comment out the nameField.setBorder(...), the highlight reappears. How do I keep the highlight, but also my custom border!?

Basically, I just want the highlight-border to show when the component has focus, and no border when the component is unfocused.

Note that the original border is of type com.apple.laf.AquaTextFieldBorder.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲鸠 2024-09-11 19:29:45

基本上,我只是想要
高亮边框显示
组件有焦点,没有边框
当组件未聚焦时。

您需要使用 FocusListener。首先您需要保存当前的边框。然后在 focusLost 上将 Border 设置为 null,在 focusGained 上使用保存的 Border。

或者您可以使用 UIManager 获取组件的默认边框。

Basically, I just want the
highlight-border to show when the
component has focus, and no border
when the component is unfocused.

The you need need to use a FocusListener. First you need to save the current Border. Then on focusLost you set the Border to null and on focusGained you use the saved Border.

Or you can get the default Border for the component by using the UIManager.

不即不离 2024-09-11 19:29:45

您也许可以使用CompoundBorder 来做到这一点。

在 Windows 下,使用 Nimbus 的外观和感觉我可以重现该问题。
我可以使用以下代码显示两个边框:

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

You might be able to do this with a CompoundBorder.

Under Windows with the Nimbus look and feel I can reproduce the problem.
I can get both borders to display with the following code:

  Border lineBorder = BorderFactory.createLineBorder(Color.WHITE, 2);
  Border originalBorder = nameField.getBorder();
  CompoundBorder compoundBorder = new CompoundBorder(lineBorder, originalBorder);
  nameField.setBorder(compoundBorder);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文