2009-06-17 4 views
4

SWT Listインスタンスが埋め込まれたCompositeに基づくクラスがあります。デフォルトの設定を使用すると、WinXPシステムで5行上のリストになります。ハードコーディングされたピクセル値やDPI設定などに依存せずに、リストの高さ(および周囲のコンポジット)を固定の行数、たとえば3に設定するにはどうすればよいでしょうか?SWTリストの行の高さを設定する方法は?

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

    setLayout(new FillLayout()); 

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

    ... 
} 

更新:

以下の作品が、それは考慮に覆われている最後の行の一部になり、境界、で追加された高さを取ることはありません。どのようにこれを計算する方法も、何ですか?

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(); 
    } 

関連する問題