我有一个窗口,它必须显示一个按钮列表,所有按钮都在彼此下面。 所有按钮都必须是特定大小的正方形(大小可以在运行时更改)。
这个简单示例的工作原理是显示所有按钮。
public class Main
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
val scrollPanel = new ScrolledComposite(shell, SWT.V_SCROLL);
scrollPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
scrollPanel.setLayout(new FillLayout());
val gridPanel = new Composite(scrollPanel, SWT.NONE);
val gridLayout = new GridLayout(1, false);
gridPanel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
gridPanel.setLayout(gridLayout);
scrollPanel.setContent(gridPanel);
val blue = display.getSystemColor(SWT.COLOR_BLUE);
val red = display.getSystemColor(SWT.COLOR_RED);
scrollPanel.setBackground(blue);
gridPanel.setBackground(red);
val exitButton = new Button(gridPanel, SWT.PUSH);
exitButton.setText("Exit");
exitButton.addListener(SWT.Selection, touchEvent -> shell.dispose());
for (int i = 1; i <= 10; i++)
{
val button = new Button(gridPanel, SWT.PUSH);
button.setText("Item: " + i);
button.setSize(60, 60);
gridPanel.setSize(gridPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
shell.setSize(100, 700);
shell.open();
while (!shell.isDisposed())
if (!display.readAndDispatch())
display.sleep();
display.dispose();
}
}
但是,每当我执行 gridPanel.computeSize() 时,按钮都会失去由 button.setSize() 设置的大小。
当我在添加按钮后删除 gridPanel.setSize() 时,大小将为 0 并且 gridPanel 根本不会显示。
当我在 scrollPanel 上设置 gridLayout 并向其添加按钮时,只显示一个按钮。 (最后一个按钮,如果我使用 setContent() 和第二个(无论出于何种原因),如果我不使用 setContent() 并且只依赖于按钮的构造函数。)
此时此刻,我完全没有选择,所以如果有人能解决这个问题,那么请继续。
最佳答案
如果您使用布局(您应该使用),则不得使用 setSize()
或以其他方式干扰布局。
使用 GridData
的 widthHint
和 heightHint
来控制按钮的大小。
例如:
GridData gridData = new GridData( SWT.BEGINNING, SWT.CENTER, false, false );
gridData.widthHint = 60;
gridData.heightHint = 60;
button.setLayoutData( gridData );
关于java - ScrolledComposite 中的 SWT GridLayout 弄乱了组件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257272/