我有以下问题:
我正在使用SWT
为我的应用程序创建GUI。我有一个TabFolder
我在其中添加了几个TabItems
,并在每个{I}中创建了一个包含一些内容的ScrolledComposite
。
TabFolder
显示正常,但ScrolledComposite
中的TabFolder
仅显示第一个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中它工作得很好)
经过一段时间后,我将问题追溯到以下几点:
事实证明,问题是“缺失”内容的大小为零,因为布局没有设置那些大小。
在我的情况下,可以通过从SWT.V_SCROLL
中删除SWT.H_SCROLL
和ScrolledComposite
样式常量来修复它。因此,上面编写的代码按预期工作。
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();
}
尽管这会导致所有内容的大小合适,但它会完全删除ScrollBars
的{{1}} ScrolledComposite
,这ScrolledComposite
不是您想要的softmax_cross_entropy_with_logits
。
有没有人知道如何解决这个问题,或者这是否是一个错误(可能已在较新的SWT版本中修复)?