【问题标题】:Remove focus from JComboBox Java Swing从 JComboBox Java Swing 中移除焦点
【发布时间】:2019-04-18 12:00:56
【问题描述】:

我正在尝试从我的JComboBox 中删除虚线。 初始的 ComboBox Initial JComboBox 在获得焦点后有一条虚线: After clicked

现在,我想删除那个焦点。但是我在UIManager 的选项(https://gist.github.com/itzg/5938035)中找不到它。我查看了 2018 年 5 月的 this 帖子,但还没有答案。

我尝试了以下方法:

  jComboBox.setFocusable(false);
  UIManager.put("ComboBox.focus", new Color(0, 0, 0, 0));

但他们都没有工作。

任何帮助将不胜感激!

【问题讨论】:

    标签: java swing combobox focus


    【解决方案1】:

    您可以执行以下操作:

    comboBox.setUI(new BasicComboBoxUI());
    

    这将在选择一个元素并让您摆脱虚线边框后产生以下结果:

    要删除任何“种类”的焦点边框,您需要覆盖用于绘制框及其组件的ComboBoxUI

    这是我用来实现示例的代码:

    public ComboboxWithoutDottedBorder() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch(Exception ignored){}
           this.setVisible(true);
           JLabel label = new JLabel("Label");
           JComboBox<String> combo = new JComboBox<>();
           this.setLayout(new BorderLayout());
           combo.addItem("A");
           combo.addItem("B");
           combo.addItem("C");
           combo.addItem("D");
           combo.setUI(new BasicComboBoxUI());
    
           this.add(label, BorderLayout.NORTH);
           this.add(combo, BorderLayout.SOUTH);
        }
    

    【讨论】:

    • 感谢您的回复。你知道实现这一目标的任何其他方法吗?如果可能,我想为组合框保留 Windows LAF。
    • 正如我所说,您可以编写一个自己的类来扩展 ComboBoxUI 并实现您自己的行为。对此没有开箱即用的解决方案。请不要使用任何从元素中移除焦点的方法,因为用户应该能够通过键盘导航;)
    猜你喜欢
    • 2011-05-06
    • 2023-03-12
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多