【问题标题】:Hide JComBox Box Arrow隐藏组合框箭头
【发布时间】:2011-09-20 13:20:52
【问题描述】:

是否可以隐藏JComboBox中显示的箭头

我试过设置:

combo.getComponent(0).setSize(new Dimension(1,1));

但它似乎不起作用

【问题讨论】:

  • this question重复
  • 和重复评论:为什么?不要发明ui小部件,用户会感到困惑!

标签: java swing jcombobox


【解决方案1】:

您必须为此创建一个新的组合框 UI:

combo.setUI(new BasicComboBoxUI() {
    protected JButton createArrowButton() {
        return new JButton() {
            public int getWidth() {
                return 0;
            }
        };
    }
});

但请注意从与您当前外观相匹配的基本 UI 继承。

例如,如果您使用 Substance,您应该从 SubstanceComboBoxUI 而不是 BasicComboBoxUI 派生新 UI。否则,您可能会失去当前 L&F 提供的功能。

编辑:如果你想让它获得某种自动完成功能,最好坚持使用普通的JTextField 并使用来自SwingXAutoCompleteDecorator

【讨论】:

  • 谢谢。另外,我注意到,当我单击绘制向下箭头的空间时,组合框会下拉,是否也可以避免这种行为?
  • -1 用于脆弱的 hack ... @Akash 如果您不想要组合框行为,请不要使用组合
  • @DR。请使用带有 Icon#null 的返回 AbstractButton 来更改它
  • @mKorbel:我为什么要这样做? BasicComboBoxUI.createArrowButton 必须返回 JButton。 (download.oracle.com/javase/7/docs/api/javax/swing/plaf/basic/…)
  • @Akash:在这种情况下,您似乎想要一个带有提案列表的普通文本字段的视觉效果。在这种情况下,请查看来自 SwingX 的AutoCompleteDecorator。 (更新了我的答案)
【解决方案2】:

我一直在寻找解决这个问题的方法,结果发现真正需要记住JComboBox 是一个复合组件。

for (Component component : TheComboBox.getComponents())
{
    if (component instanceof JButton) {
        TheComboBox.remove(component);
    }
}

感谢mKorbelreminder

【讨论】:

    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 2014-02-18
    • 2020-02-08
    • 2017-05-12
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多