是否可以计算SWT中每个窗框列占用的宽度? 我只能得到每列的权重。我们可以用像素计算宽度,而不是用任何方法吗?
答案 0 :(得分:1)
好吧,我想出了一个解决方案。它不是像素完美的,但应该给你一个很好的起点。
这个想法是基于总宽度和重量基本计算个别宽度。关键部分是我使用Math.round()
,在最坏的情况下会导致+ -1像素错误。
然而,这里是:
public static void main(String[] args)
{
final Display display = new Display();
Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout(SWT.VERTICAL));
final SashForm sashForm = new SashForm(shell, SWT.HORIZONTAL);
Text text = new Text(sashForm, SWT.CENTER);
text.setText("Text in pane #1");
text = new Text(sashForm, SWT.CENTER);
text.setText("Text in pane #2");
text = new Text(sashForm, SWT.CENTER);
text.setText("Text in pane #3");
sashForm.setWeights(new int[] { 1, 2, 3 });
Button button = new Button(shell, SWT.PUSH);
button.setText("Get width");
button.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
int overallWidth = sashForm.getClientArea().width;
int[] widths = new int[sashForm.getSashWidth()];
int overallWeight = 0;
for (int i : sashForm.getWeights())
{
overallWeight += i;
}
for (int i = 0; i < widths.length; i++)
{
widths[i] = Math.round(overallWidth * (1f * sashForm.getWeights()[i] / overallWeight));
}
System.out.println(Arrays.toString(widths));
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
while (!display.readAndDispatch())
{
display.sleep();
}
}
}