2013-06-21 5 views
2

Я пытаюсь сделать большую белую коробку в окне SWT для отображения информации. Я хочу, чтобы это отличалось от ярлыка, но я также хочу, чтобы оно не редактировалось.Белый, только для чтения Текстовое поле в SWT

До сих пор мне удалось создать текстовое поле, редактируемое в полдень, с серой спиной (сверху). Я нацелен на внешний вид, который я получаю от List (под номером Text).

enter image description here

(Проблема с List том, что он может отображать только текст на одной строке в пункте списка. Мне нужно отобразить, возможно, абзац текста).

ответ

3

Если вы действительно должны использовать на белом фоне, вы можете использовать обычный Text и просто запретить его редактирование.

Однако, как уже упомянуто @Eugene, вы должны придерживаться соглашений UI, потому что делать в противном случае может запутать пользователей ...

Вот код, который создает только для чтения Text с «нормальным» background:

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new FillLayout()); 

    Text text = new Text(shell, SWT.BORDER); 
    text.setText("Read only"); 

    text.addListener(SWT.Verify, new Listener() 
    { 
     @Override 
     public void handleEvent(Event e) 
     { 
      e.doit = false; 
     } 
    }); 

    shell.pack(); 
    shell.setSize(600, 60); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 
+0

Спасибо, это работает! – CodyBugstein

1

Вы можете передать SWT.READ_ONLY вашему конструктору текстового поля.

+0

Я сделал это, но это делает текстовое поле серым (как показано выше), а также применит только окружающее поле непосредственно к тексту. Я хочу, чтобы он растягивал всю ширину родительского композита (как показано в списке). – CodyBugstein

+4

Серость помогает пользователю понять, что редактировать содержимое бесполезно. Как правило, я предлагаю следовать соглашениям UI OS. Размер управления определяется макетом, поэтому вы можете сделать его настолько большим, насколько хотите. Можете ли вы перечислить исходный код в своем вопросе? – Eugene

4

Вы также можете поймать события клавиатуры и заблокировать их.

txtField.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent e) { 
     e.doit = false; 
    } 
}); 
Смежные вопросы