【问题标题】:How to keep the highlight border of a JComponent, when custom border is set设置自定义边框时如何保持 JComponent 的高亮边框
【发布时间】:2011-02-28 20:33:19
【问题描述】:

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

【问题讨论】:

    标签: java focus border highlight jcomponent


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      基本上,我只是想要 highlight-border 在 组件有焦点,没有边框 当组件未聚焦时。

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

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

      【讨论】:

      • 您的两个答案在某种程度上都有效。但有一个问题。原来的边框好像是复合边框,高亮为外边框,白色的1px线条边框为内边框。我不想要内边框!注意:我用的是OS X,原来边框的类型其实是com.apple.laf.AquaTextFieldBorder
      猜你喜欢
      • 2014-07-29
      • 2014-01-11
      • 2019-03-08
      • 2011-09-03
      • 1970-01-01
      • 2011-10-07
      • 2021-05-21
      • 2011-06-01
      • 1970-01-01
      相关资源
      最近更新 更多