Wie Höhe von SWT-Liste in den Reihen setzen?
Frage
Ich habe eine Klasse basierend auf Composite
, die eine SWT List
Instanz einbettet. Mit den Standardeinstellungen ist die Liste fünf Reihen hoch auf meinem WinXP-System. Ohne sich hart codierte Pixelwerte oder DPI Einstellungen und dergleichen, wie kann ich die Höhe der Liste gesetzt (und die umgebende composite) auf eine feste Anzahl von Zeilen, sagen wir 3, ohne Zusatz inneren Ränder?
public FileSetBox(Composite parent, int style)
{
super(parent, style);
setLayout(new FillLayout());
this.list = new List(this, SWT.V_SCROLL);
...
}
Update:
Die folgenden Werke, aber es hat nicht berücksichtigt, um die Höhe von der Grenze gegeben, die in Teilen der letzten Zeile ergibt abgedeckt. Irgendwelche Ideen, wie diese zu berechnen, auch?
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);
}
Lösung
Können Sie nicht list.getBorderWidth () und list.getItemHeight (), um die Höhe zu bekommen?
Andere Tipps
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(); }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow