当小部件大小更改时,SWT GridLayout 列不会调整大小
SWT GridLayout column does not resize when widget size changes
我有一个由两列组成的 SWT GridLayout。一列是一个标签,它应该正好是其文本的水平大小。另一列是 StyledText,它应该占据剩余的水平 space。但是,如果标签的大小发生变化(因为文本发生变化),则网格不会调整大小。这导致 Label 与 StyledText 重叠。我想要的是让网格调整列的大小,以便左列变得足够大以容纳较长的文本,而右手列正好缩小该数量。有几个关于 SWT GridLayouts 和调整 SO 大小的问题,但其中 none 解决了这个问题。标题为 SWT GridLayout columns overlap 的似乎是赢家,只是它并不完全相同并且没有实际答案。
这是 Overlapping GridLayout
的图片
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.graphics.Font;
final class GridOverlap{
public static void main(String [] args) {
Display display = new Display();
Shell shell = new Shell(display);
GridLayout layout = new GridLayout(2, false);
shell.setLayout(layout);
Label rows = new Label(shell, SWT.RIGHT);
rows.setText("1");
GridData rowsLayoutData = new GridData(SWT.RIGHT, SWT.FILL, false, true);
rows.setLayoutData(rowsLayoutData);
StyledText editor = new StyledText(shell, SWT.V_SCROLL | SWT.H_SCROLL);
GridData editorLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
editor.setLayoutData(editorLayoutData);
editor.setText("Overlapped");
shell.open();
// This is where the problem is.
rows.setText("1000\n999");
rows.pack();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
}
您需要告诉 shell 重新计算整个 shell 的布局以考虑更改大小。
使用
shell.layout();
而不是 rows.pack()
我有一个由两列组成的 SWT GridLayout。一列是一个标签,它应该正好是其文本的水平大小。另一列是 StyledText,它应该占据剩余的水平 space。但是,如果标签的大小发生变化(因为文本发生变化),则网格不会调整大小。这导致 Label 与 StyledText 重叠。我想要的是让网格调整列的大小,以便左列变得足够大以容纳较长的文本,而右手列正好缩小该数量。有几个关于 SWT GridLayouts 和调整 SO 大小的问题,但其中 none 解决了这个问题。标题为 SWT GridLayout columns overlap 的似乎是赢家,只是它并不完全相同并且没有实际答案。 这是 Overlapping GridLayout
的图片import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.graphics.Font;
final class GridOverlap{
public static void main(String [] args) {
Display display = new Display();
Shell shell = new Shell(display);
GridLayout layout = new GridLayout(2, false);
shell.setLayout(layout);
Label rows = new Label(shell, SWT.RIGHT);
rows.setText("1");
GridData rowsLayoutData = new GridData(SWT.RIGHT, SWT.FILL, false, true);
rows.setLayoutData(rowsLayoutData);
StyledText editor = new StyledText(shell, SWT.V_SCROLL | SWT.H_SCROLL);
GridData editorLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
editor.setLayoutData(editorLayoutData);
editor.setText("Overlapped");
shell.open();
// This is where the problem is.
rows.setText("1000\n999");
rows.pack();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
}
您需要告诉 shell 重新计算整个 shell 的布局以考虑更改大小。
使用
shell.layout();
而不是 rows.pack()