Как я могу отключить текст, который можно прокручивать?

Мой текст объявлен как

Text text= new Text(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.WRAP);

В некоторых случаях его следует отключить. Но когда я делаю
text.setEnabled(false); полоса прокрутки текста также отключается, и я не могу полностью увидеть значение в тексте.

Мое текстовое поле не может быть ТОЛЬКО ДЛЯ ЧТЕНИЯ. В некоторых случаях его можно редактировать.

Мне известно о методе setEditable() в тексте, но я хотел бы иметь такое же поведение, как и при отключенном тексте, т.е. изменение цвета фона, отсутствие мигающего курсора (каретки), невозможность щелчков мышью и невозможность выбора текста и т. д.

Я смог изменить цвет фона, выполнив

text.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));

Но я не мог отключить курсор, выделение текста и щелчок мышью.

введите здесь описание изображения

Есть ли способ сохранить активную полосу прокрутки для отключенного текста?


person Monikka    schedule 04.03.2014    source источник


Ответы (1)


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

Однако вы можете обернуть Text в ScrolledComposite. Таким образом, вместо Text будет прокручиваться ScrolledComposite.

Вот пример:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout(SWT.VERTICAL));

    final ScrolledComposite composite = new ScrolledComposite(shell, SWT.V_SCROLL);
    composite.setLayout(new FillLayout());

    final Text text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.WRAP);

    composite.setContent(text);
    composite.setExpandHorizontal(true);
    composite.setExpandVertical(true);
    composite.setMinSize(text.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    Button button = new Button(shell, SWT.PUSH);
    button.setText("Add text and disable");
    button.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            text.setText("lalala\nlalala\nlalala\nlalala\nlalala\nlalala\n");
            text.setEnabled(false);
            composite.setMinSize(text.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        }
    });

    shell.pack();
    shell.setSize(300, 150);
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

Вот как это выглядит:

введите здесь описание изображения

person Baz    schedule 04.03.2014