我希望ScrolledComposite有一个父母有一个GridLayout但滚动条没有显示,除非我使用FillLayout.我的问题FillLayout是它的孩子占用了可用空间的相等部分.
在我的情况下,有两个小部件,顶部的一个小部件应该占不到窗口的1/4,并且ScrolledComposite应该占用剩余空间.但是,它们都占了一半.
有没有办法使用GridLayoutwith ScrolledComposite或是否可以修改行为FillLayout?
这是我的代码:
private void initContent() {
//GridLayout shellLayout = new GridLayout();
//shellLayout.numColumns = 1;
//shellLayout.verticalSpacing = 10;
//shell.setLayout(shellLayout);
shell.setLayout(new FillLayout(SWT.VERTICAL));
searchComposite = new SearchComposite(shell, SWT.NONE);
searchComposite.getSearchButton().addListener(SWT.Selection, this);
ScrolledComposite scroll = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
scroll.setLayout(new GridLayout(1, true));
Composite scrollContent = new Composite(scroll, SWT.NONE);
scrollContent.setLayout(new GridLayout(1, true));
for (ChangeDescription description : getChanges(false)) {
ChangesComposite cc = new ChangesComposite(scrollContent, description);
} …Run Code Online (Sandbox Code Playgroud) 我想使用SWT为我的一个应用程序构建一个Master-Detail布局.
Container,Content,Sidebar和Part1是Composite实例.滚动是ScrolledComposite
所需的布局是这样的:
+--Container-------------------------------------+
|+--Content----------------------++--Sidebar----+|
|| ||+--Part1----+||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||+-----------+||
|| ||+--Scrolled-+||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||+-----------+||
|+-------------------------------++-------------+|
+------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
内容应该可以水平和垂直地抓取所有空间.
侧边栏基本上是Part1和Scrolled的容器,它应该具有相同的高度.
Scrolled是Composite的容器,包含动态数量的子项,这些子项排列在内容合成中.因为子项的数量可能有很大的变化,所以这个Composite应该是可滚动的.
我现在用以下方式实现了这个:
Container有一个包含2个列的GridLayout.
在内部,内容具有FILL_BOTH行为并且还获取所有HORIZONTAL/VERTICAL空间.
侧边栏有一个FillLayout(SWT.VERTICAL),包含Part1和Scrolled Childs.
问题: 当将大量项目放入滚动的复合材料中时,布局只会溢出可用空间,并且没有滚动可用的位置.
当我对容器使用FillLayout(SWT.HORIZONTAL)时,行为是所希望的,因为滚动并且一切都是"内部边界".
有没有办法在使用GridLayout时实现此行为,因为我希望内容占用大部分空间.
附上当前测试的SWT片段:
public class Scrolled {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2,false)); …Run Code Online (Sandbox Code Playgroud) 我有一个ScrolledComposite,其内容被截断.我用谷歌搜索,并意识到它是Windows上的一个已知问题.
我能找到的唯一建议的解决方法是使用canvas.scroll功能.
鉴于问题的年龄,我想知道是否有更好的解决方法?
谢谢!
(编辑:在撰写本文时,链接是:http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet48.java ?view = markup&content-type = text%2Fvnd.viewcvs-markup&revision = HEAD)
我正在尝试创建一个滚动的复合材料,其中包含一个内部网格布局的复合材料.
但是,当我尝试设置滚动复合的内容时,没有任何加载.这似乎只会影响具有网格布局的复合材料.
我究竟做错了什么?
我的代码:
CTabItem tbtmNotes = new CTabItem(tabFolder, SWT.NONE);
tbtmNotes.setText("Notes");
ScrolledComposite scrollComposite = new ScrolledComposite(tabFolder, SWT.V_SCROLL | SWT.BORDER);
tbtmNotes.setControl(scrollComposite);
scrollComposite.setContent(new hm_Composites.Comp_Animal_Notes(tabFolder, SWT.None, a));
Run Code Online (Sandbox Code Playgroud) 我想将完整滚动的合成导出到图像。我的意思是整个复合材料,而不仅仅是复合材料的可见区域。我找到了这个例子:
Image drawable = new Image(display, someComposite.getBounds());
GC gc = new GC(drawable);
mainWidget.print(gc);
ImageLoader loader = new ImageLoader();
loader.data = new ImageData[] {drawable.getImageData()};
loader.save("exportedImage.bmp", SWT.IMAGE_BMP);
drawable.dispose();
gc.dispose();
Run Code Online (Sandbox Code Playgroud)
但输出是滚动复合的可见区域。:( 并不是全部,我猜是因为该.getBound()方法,但我找不到将其切换到另一种方法的方法。我尝试过,.getClientArea()但没有成功...
预先感谢,约西。
我有两个ScrolledComposites,我正在像这样同步它们的垂直滚动位置:
final ScrollBar vScroll1 = canvasScroll.getVerticalBar();
final ScrollBar vScroll2 = titleScroll.getVerticalBar();
vScroll1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
titleScroll.setOrigin(titleScroll.getOrigin().x, canvasScroll.getOrigin().y);
}
});
vScroll2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
canvasScroll.setOrigin(canvasScroll.getOrigin().x, titleScroll.getOrigin().y);
}
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,除了它显示了两者的滚动条ScrolledComposites。我只希望 oneScrolledComposite的滚动条可见,因此我将其可见性之一设置为 false:
vScroll2.setVisible(false);
Run Code Online (Sandbox Code Playgroud)
这没有效果。我也尝试在ScrolledComposite没有SWT.V_SCROLL标志的情况下实例化,但这会在运行上述代码时导致空指针异常。滚动条确实需要在那里,我只是希望它不可见。那可能吗?