как изменить внешний вид ContentProposalAdapter - PullRequest
2 голосов
/ 02 сентября 2011

Я использую ContentProposalAdapter для автоматического завершения текстового поля, все работает нормально, но я хочу изменить его внешний вид, например, шрифт или цвет фона всплывающего окна, и еще, я искал, но не могу найти метод ContentProposalAdapter для выполненияэти вещи.Как я могу изменить внешний вид ContentProposalAdapter?

Ответы [ 2 ]

3 голосов
/ 02 сентября 2011

У меня нет опыта работы с этой частью jface, но когда вы проверяете документацию, вы можете найти метод openProposalPopup ( см. Документы )

Этот класс предоставляет некоторые переопределяемые методы, позволяющие клиентам вручную контролировать всплывающее окно. Однако большая часть реализации остается приватной.

Откройте всплывающее окно предложения и отобразите предложения, предоставленные поставщиком предложения. Этот метод возвращается немедленно. То есть он не ждет выбора предложения. Этот метод используется подклассами для явного вызова открытия всплывающего окна. Если предложений нет, всплывающее окно не откроется, и прозвучит звуковой сигнал.

Если вы проверите код этого метода, вы найдете

/**
 * Open the proposal popup and display the proposals provided by the
 * proposal provider. If there are no proposals to be shown, do not show the
 * popup. This method returns immediately. That is, it does not wait for the
 * popup to open or a proposal to be selected.
 * 
 * @param autoActivated
 *            a boolean indicating whether the popup was autoactivated. If
 *            false, a beep will sound when no proposals can be shown.
 */
private void openProposalPopup(boolean autoActivated) {
    if (isValid()) {
        if (popup == null) {
            // Check whether there are any proposals to be shown.
            recordCursorPosition(); // must be done before getting proposals
            IContentProposal[] proposals = getProposals();
            if (proposals.length > 0) {
                if (DEBUG) {
                    System.out.println("POPUP OPENED BY PRECEDING EVENT"); //$NON-NLS-1$
                }
                recordCursorPosition();
                popup = new ContentProposalPopup(null, proposals);
                popup.open();
                popup.getShell().addDisposeListener(new DisposeListener() {
                    public void widgetDisposed(DisposeEvent event) {
                        popup = null;
                    }
                });
                internalPopupOpened();
                notifyPopupOpened();
            } else if (!autoActivated) {
                getControl().getDisplay().beep();
            }
        }
    }
}

/**
 * Open the proposal popup and display the proposals provided by the
 * proposal provider. This method returns immediately. That is, it does not
 * wait for a proposal to be selected. This method is used by subclasses to
 * explicitly invoke the opening of the popup. If there are no proposals to
 * show, the popup will not open and a beep will be sounded.
 */
protected void openProposalPopup() {
    openProposalPopup(false);
}

Код создает ContentProposalPopup экземпляр, который управляет внешним видом всплывающего виджета и несколькими другими вещами ( см. Исходный код всего класса ContentProposalAdapeter ).

Итак, если вы создадите новый класс, который переопределит openProposalPopup() и будет использовать ваш собственный ContentProposalPopup, вы можете управлять внешним видом так, как вам хочется.

1 голос
/ 26 сентября 2011

У нас тоже были проблемы с ContentProposalAdapter, и в итоге мы скопировали его, затем изменили в соответствии с нашими потребностями.

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