TabFolder 中的 ScrolledCompsite 将内容大小调整为零
ScrolledCompsite in TabFolder sizes content to zero
我有以下问题:
我正在使用 SWT
为我的应用程序创建一个 GUI。我有一个 TabFolder
,我在其中添加了几个 TabItems
,并在每个 ScrolledComposite
中创建了一个包含一些内容的 ScrolledComposite
。
TabFolder
显示正常,但是 TabFolder
中的 ScrolledComposite
只显示第一个 TabItem
中的内容。所有其他 ScrolledComposites
本身都是可见的,但它们的内容是不可见的。
这里有一小段代码可以演示我所指的内容:
Display display = new Display();
Shell topShell = new Shell(display);
topShell.setSize(800, 800);
topShell.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
topShell.setLayout(new FillLayout());
TabFolder folder = new TabFolder(topShell, SWT.NONE);
for (int i = 0; i < 5; i++) {
TabItem item = new TabItem(folder, SWT.NONE);
item.setText("Item " + i);
ScrolledComposite scroller = new ScrolledComposite(folder,
SWT.H_SCROLL | SWT.V_SCROLL );
scroller.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
Composite content = new Composite(scroller, SWT.NONE);
content.setBackground(display.getSystemColor(SWT.COLOR_RED));
scroller.setContent(content);
scroller.setExpandHorizontal(true);
scroller.setExpandVertical(true);
item.setControl(scroller);
}
topShell.setVisible(true);
while (!topShell.isDisposed()) {
display.readAndDispatch();
}
如果该区域被涂成红色,则表明正在显示内容。如果内容不可见则区域为蓝色(ScrolledComposite
的背景)
我不确定这是否重要,但这发生在 Linux Mint 18 上,它似乎只发生在 GTK 3 中(在 2 中它工作得很好)
经过一段时间后,我将问题归结为以下几点:
结果发现问题是 "missing" 内容的大小为零,因为布局没有设置这些内容的大小。
在我的例子中,可以通过从 ScrolledComposite
中删除 SWT.V_SCROLL
和 SWT.H_SCROLL
样式常量来修复它。因此,上面写成下面的代码可以正常工作。
Display display = new Display();
Shell topShell = new Shell(display);
topShell.setSize(800, 800);
topShell.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
topShell.setLayout(new FillLayout());
TabFolder folder = new TabFolder(topShell, SWT.NONE);
for (int i = 0; i < 5; i++) {
TabItem item = new TabItem(folder, SWT.NONE);
item.setText("Item " + i);
ScrolledComposite scroller = new ScrolledComposite(folder,
SWT.NONE);
scroller.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
Composite content = new Composite(scroller, SWT.NONE);
content.setBackground(display.getSystemColor(SWT.COLOR_RED));
scroller.setContent(content);
scroller.setExpandHorizontal(true);
scroller.setExpandVertical(true);
item.setControl(scroller);
}
topShell.setVisible(true);
while (!topShell.isDisposed()) {
display.readAndDispatch();
}
虽然这会导致所有内容的大小都合适,但它会完全删除 ScrolledComposite
的 ScrollBars
,这在某种程度上不是您想要的 ScrolledComposite
。
有谁知道如何解决这个问题或者这是否是一个错误(可能已在较新的 SWT 版本中修复)?
几个月前我已经修复了与此相关的错误。
可以试试最新的SWT大师吗?
http://download.eclipse.org/eclipse/downloads/
我有以下问题:
我正在使用 SWT
为我的应用程序创建一个 GUI。我有一个 TabFolder
,我在其中添加了几个 TabItems
,并在每个 ScrolledComposite
中创建了一个包含一些内容的 ScrolledComposite
。
TabFolder
显示正常,但是 TabFolder
中的 ScrolledComposite
只显示第一个 TabItem
中的内容。所有其他 ScrolledComposites
本身都是可见的,但它们的内容是不可见的。
这里有一小段代码可以演示我所指的内容:
Display display = new Display();
Shell topShell = new Shell(display);
topShell.setSize(800, 800);
topShell.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
topShell.setLayout(new FillLayout());
TabFolder folder = new TabFolder(topShell, SWT.NONE);
for (int i = 0; i < 5; i++) {
TabItem item = new TabItem(folder, SWT.NONE);
item.setText("Item " + i);
ScrolledComposite scroller = new ScrolledComposite(folder,
SWT.H_SCROLL | SWT.V_SCROLL );
scroller.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
Composite content = new Composite(scroller, SWT.NONE);
content.setBackground(display.getSystemColor(SWT.COLOR_RED));
scroller.setContent(content);
scroller.setExpandHorizontal(true);
scroller.setExpandVertical(true);
item.setControl(scroller);
}
topShell.setVisible(true);
while (!topShell.isDisposed()) {
display.readAndDispatch();
}
如果该区域被涂成红色,则表明正在显示内容。如果内容不可见则区域为蓝色(ScrolledComposite
的背景)
我不确定这是否重要,但这发生在 Linux Mint 18 上,它似乎只发生在 GTK 3 中(在 2 中它工作得很好)
经过一段时间后,我将问题归结为以下几点:
结果发现问题是 "missing" 内容的大小为零,因为布局没有设置这些内容的大小。
在我的例子中,可以通过从 ScrolledComposite
中删除 SWT.V_SCROLL
和 SWT.H_SCROLL
样式常量来修复它。因此,上面写成下面的代码可以正常工作。
Display display = new Display();
Shell topShell = new Shell(display);
topShell.setSize(800, 800);
topShell.setBackground(display.getSystemColor(SWT.COLOR_YELLOW));
topShell.setLayout(new FillLayout());
TabFolder folder = new TabFolder(topShell, SWT.NONE);
for (int i = 0; i < 5; i++) {
TabItem item = new TabItem(folder, SWT.NONE);
item.setText("Item " + i);
ScrolledComposite scroller = new ScrolledComposite(folder,
SWT.NONE);
scroller.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
Composite content = new Composite(scroller, SWT.NONE);
content.setBackground(display.getSystemColor(SWT.COLOR_RED));
scroller.setContent(content);
scroller.setExpandHorizontal(true);
scroller.setExpandVertical(true);
item.setControl(scroller);
}
topShell.setVisible(true);
while (!topShell.isDisposed()) {
display.readAndDispatch();
}
虽然这会导致所有内容的大小都合适,但它会完全删除 ScrolledComposite
的 ScrollBars
,这在某种程度上不是您想要的 ScrolledComposite
。
有谁知道如何解决这个问题或者这是否是一个错误(可能已在较新的 SWT 版本中修复)?
几个月前我已经修复了与此相关的错误。
可以试试最新的SWT大师吗? http://download.eclipse.org/eclipse/downloads/