2009-06-17 3 views
4

У меня есть класс, основанный на Composite, который включает экземпляр SWT List. Используя настройки по умолчанию, список содержит пять строк в моей системе WinXP. Не полагаясь на жестко закодированные значения пикселей или параметры DPI и т. П., Как я могу установить высоту списка (и окружающего композита) на фиксированное количество строк, скажем 3, без каких-либо добавленных внутренних полей?Как установить высоту SWT List в строках?

public FileSetBox(Composite parent, int style) 
{ 
    super(parent, style); 

    setLayout(new FillLayout()); 

    this.list = new List(this, SWT.V_SCROLL); 

    ... 
} 

Update:

следующие работы, но она не принимает во внимание высоты добавленной границы, что приводит к частям последней строки прикрываясь. Любые идеи, как рассчитать это тоже?

public FileSetBox(Composite parent, int style) 
{ 
    ... 
    GC gc = new GC(this); 
    gc.setFont(this.list.getFont()); 
    this.preferredHeight = gc.getFontMetrics().getHeight() * 3; 
    gc.dispose(); 
    ... 
} 

@Override 
public Point computeSize(int arg0, int arg1) 
{ 
    Point size = super.computeSize(arg0, arg1); 
    return new Point(size.x, this.preferredHeight); 
} 

ответ

4

Вы можете не использовать list.getBorderWidth() и list.getItemHeight(), чтобы получить высоту?

+0

Глупо мне ... это было настолько очевидно, что я его не замечал. Большое спасибо :-) –

1
 
public FileSetBox(Composite parent, int style) 
{ 
    super(parent, style); 

    setLayout(new GridLayout(1, false)); 

    this.list = new List(this, SWT.V_SCROLL); 

    GridData data = new GridData(GridData.FILL_BOTH); 
    data.heightHint = 10 * ((List)control).getItemHeight(); // height for 10 rows 
    data.widthHint = getStringWidth(25, list); // width enough to display 25 chars 
    list.setLayoutData(data); 

    ... 
} 

    public static int getStringWidth(int nChars, Control control){ 
     GC gc = new GC(control); 
     gc.setFont(control.getFont()); 
     FontMetrics fontMetrics = gc.getFontMetrics(); 
     gc.dispose(); 
     return nChars * fontMetrics.getAverageCharWidth(); 
    } 

Смежные вопросы