Скрыть кнопку JComboBox, если включен! - PullRequest
3 голосов
/ 13 октября 2011

Я хотел бы расширить класс 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.

Ответы [ 3 ]

4 голосов
/ 13 октября 2011

технически вы можете создать подкласс 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);
        }

    };

Возможно, вы захотите пересмотреть требование, потому что ононестандартное поведение пользовательского интерфейса - и, как таковое, может запутать пользователей

0 голосов
/ 13 октября 2011

У вас могут возникнуть проблемы с поиском, потому что вы ищете не в том месте - попробуйте javax.swing.plaf.basic.BasicComboBoxUI.installComponents() и javax.swing.plaf.basic.BasicComboBoxUI.configureArrowButton()

0 голосов
/ 13 октября 2011

Вы можете использовать что-то вроде этого:

public class CustomCombo extends JComboBox {

@Override
public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    if(!enabled) {
        removeArrowButton();
    }
    else {
        addArrowButton();         
    }
}

private void removeArrowButton() {
    Component[] comp = this.getComponents();
    Component removeComponent = null;
    for (int i = 0; i < comp.length; i++) {
        if(comp[i] instanceof JButton) {
            removeComponent = comp[i];
        }
    }
    if(removeComponent != null) {
        this.remove(removeComponent);
    }
}
}

При нажатии кнопки customCombo.setEnabled(false).

кнопка со стрелкой будет удалена

Метод addArrowButton() оставлен на ваше усмотрение. Это должно просто дать вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...