SWT-решение для пользователя - PullRequest
       13

SWT-решение для пользователя

4 голосов
/ 19 августа 2011

Гипотетический вопрос:

Как насчет этого решения по разработке SWT о том, что для создания пользовательского составного виджета необходимо создать подкласс Composite?Это действительно разумно?

Не лучше ли было бы, если бы у SWT был класс UserControl, как в Win Forms, или что-то еще?

Когда я создаю подкласс Composite, мой пользовательский виджет получает интерфейс Composite, даже еслион не предназначен для использования в качестве Композитов клиентами.Это вроде плохо.То же самое верно для некоторых SWT-виджетов, таких как Spinner.

Есть ли хороший способ обойти это?

И, самое интересное: кто-нибудь знает мотивацию для этого дизайнерского решения?

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Вы можете посмотреть исходный код для org.eclipse.swt.custom.CCombo, чтобы увидеть, как SWT решает эту проблему внутренне, так как CCombo расширяется от Composite.Вот как они обрабатывают setLayout(), например:

/**
 * Sets the layout which is associated with the receiver to be
 * the argument which may be null.
 * <p>
 * Note: No Layout can be set on this Control because it already
 * manages the size and position of its children.
 * </p>
 *
 * @param layout the receiver's new layout or null
 *
 * @exception SWTException <ul>
 *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
 * </ul>
 */
public void setLayout (Layout layout) {
    checkWidget ();
    return;
}
1 голос
/ 19 августа 2011

Вы можете создать свой собственный NonCompositeUserControl класс:

public class NonCompositeUserControl extends Composite {
    @Override
    public void setLayout(Layout layout) {
        throw new UnsupportedOperationException("This control is not really a composite")
    }
    // similarly for other methods
}
...