如何在 Eclipse SWT 中使用 ScrolledComposite 实现动态大小 shell?
How to implememt a dynamic sized shell with a ScrolledComposite in eclipse SWT?
我创建了一个 Shell 并向其中添加了一个包含文本作为其内容的 ScrolledComposite。但我希望 shell 根据内容大小动态更改大小。我的实现如下
shell.setLayout(new GridLayout(1,true));
ScrolledComposite sc = new ScrolledComposite(shell, SWT.V_SCROLL|SWT.H_SCROLL);
sc.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).hint(200, 200).create());
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
Composite top = new Composite(sc,SWT.NONE);
top.setLayout(GridLayoutFactory.swtDefaults().numColumns(1).create());
StyledText styledText = new StyledText(top, SWT.NONE);
styledText.setText(text);
StyleRange style = new StyleRange();
style.start = 0;
style.length = text.indexOf(":"); //$NON-NLS-1$
style.fontStyle = SWT.BOLD;
styledText.setStyleRange(style);
sc.setContent(top);
// shell.setSize(sc.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sc.setMinSize(top.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sc.pack(true);
shell.setVisible(true);
当我取消注释上面代码中的注释行时,shell是根据内容调整大小,但在这种情况下无法实现滚动条。
如果内容超出一定限制,我也想获得滚动条。如果内容在限制之内,我不希望 shell 有额外的空白 space。
有人可以帮我吗??
StyledText
支持滚动本身,无需使用 ScrolledComposite
:
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new GridLayout());
StyledText text = new StyledText(shell, SWT.V_SCROLL | SWT.H_SCROLL);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
text.setText(....);
shell.layout();
Point size = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
shell.setSize(Math.min(size.x, 100), Math.min(size.y, 100));
shell.open();
不要使用 shell.pack()
,只需调用 shell.layout
,然后调用 shell.computeSize
即可查看未滚动的大小。过大调整大小调用shell.setSize
.
我创建了一个 Shell 并向其中添加了一个包含文本作为其内容的 ScrolledComposite。但我希望 shell 根据内容大小动态更改大小。我的实现如下
shell.setLayout(new GridLayout(1,true));
ScrolledComposite sc = new ScrolledComposite(shell, SWT.V_SCROLL|SWT.H_SCROLL);
sc.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).hint(200, 200).create());
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
Composite top = new Composite(sc,SWT.NONE);
top.setLayout(GridLayoutFactory.swtDefaults().numColumns(1).create());
StyledText styledText = new StyledText(top, SWT.NONE);
styledText.setText(text);
StyleRange style = new StyleRange();
style.start = 0;
style.length = text.indexOf(":"); //$NON-NLS-1$
style.fontStyle = SWT.BOLD;
styledText.setStyleRange(style);
sc.setContent(top);
// shell.setSize(sc.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sc.setMinSize(top.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sc.pack(true);
shell.setVisible(true);
当我取消注释上面代码中的注释行时,shell是根据内容调整大小,但在这种情况下无法实现滚动条。
如果内容超出一定限制,我也想获得滚动条。如果内容在限制之内,我不希望 shell 有额外的空白 space。
有人可以帮我吗??
StyledText
支持滚动本身,无需使用 ScrolledComposite
:
Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setLayout(new GridLayout());
StyledText text = new StyledText(shell, SWT.V_SCROLL | SWT.H_SCROLL);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
text.setText(....);
shell.layout();
Point size = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT);
shell.setSize(Math.min(size.x, 100), Math.min(size.y, 100));
shell.open();
不要使用 shell.pack()
,只需调用 shell.layout
,然后调用 shell.computeSize
即可查看未滚动的大小。过大调整大小调用shell.setSize
.