编程语言
首页 > 编程语言> > java-如果启用了JComboBox的按钮,则隐藏它

java-如果启用了JComboBox的按钮,则隐藏它

作者:互联网

我想扩展JComboBox类,不做任何更改,我希望新组件在禁用组合框时隐藏选择按钮.

我找不到此按钮的创建位置

编辑:到目前为止,我正在使用此代码:

@Override
public void setEnabled(boolean b)
{
    super.setEnabled(b);

    Component[] comps = getComponents();
    for(Component comp : comps)
    {
        if(comp instanceof MetalComboBoxButton)
        {
            final MetalComboBoxButton dropDownButton = (MetalComboBoxButton) comp;
            dropDownButton.setVisible(b);
            break;
        }
    }
}

编辑2:我无法做我最后想要做的事情,就好像我切换到Nimbus PLAF一样,即使我隐藏了绘制背景的按钮,因此也只有箭头被遮盖了,其他所有内容仍然存在.

我将与JPanel有关.

解决方法:

从技术上讲,您可以继承JComboBox并删除/添加按钮(如@flash所示)或切换其可见性

    final JComboBox box = new JComboBox(new Object[] {1, 2, 3}) {

        /** 
         * @inherited <p>
         */
        @Override
        public void setEnabled(boolean b) {
            if (b == isEnabled()) return;
            for (Component child : getComponents()) {
                if (child instanceof JButton) {
                    child.setVisible(b);
                    break;
                }
            }
            super.setEnabled(b);
        }

    };

但是,您可能需要重新考虑该要求,因为它是非标准的ui行为-这样可能会使用户感到困惑

标签:jcombobox,swing,java
来源: https://codeday.me/bug/20191102/1988943.html