我正在尝试创建一个滚动的复合材料,其中包含一个内部有网格布局的复合材料。
但是,当我尝试设置滚动复合的内容时,没有任何加载。 这似乎只会影响具有网格布局的复合材料。
我做错了什么?
我的代码:
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));
答案 0 :(得分:9)
经过一番摆弄后,我得到了以下工作,希望能帮助其他人。
public Comp_Animal_Notes(Composite parent, int style, Animal a)
throws Exception {
super(parent, SWT.NONE);
setLayout(new FillLayout(SWT.HORIZONTAL));
ScrolledComposite scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
Composite composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
ArrayList<Note> alNotes = a.getAnimalNotes();
this.setRedraw(false);
for (int i = 0; i < alNotes.size(); i++) {
Note note = alNotes.get(i);
CLabel lblNoteDate = new CLabel(composite, SWT.BORDER);
lblNoteDate.setFont(SWTResourceManager.getFont("Tahoma", 8,
SWT.BOLD));
lblNoteDate.setText("Date:");
lblNoteDate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
CLabel lblNotedatetxt = new CLabel(composite, SWT.BORDER);
lblNotedatetxt.setBackground(SWTResourceManager
.getColor(SWT.COLOR_WHITE));
lblNotedatetxt.setText(note.getUserDate());
lblNotedatetxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
CLabel lblNoteTxt = new CLabel(composite, SWT.BORDER);
lblNoteTxt.setBackground(SWTResourceManager
.getColor(SWT.COLOR_WHITE));
lblNoteTxt.setText(note.getStrNote());
lblNoteTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
}
scrolledComposite.setContent(composite);
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
this.setRedraw(true);
}
答案 1 :(得分:5)
如果Talon06的代码段不起作用,请尝试进行以下更改。
scrolledComposite.setContent(composite);
//add this line
composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
//not sure about this line, was optional in my case
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
this.setRedraw(true);
我发现如果我明确设置了复合的大小,ScrolledComposite中的组件才会变得可见。
@ Talon06:谢谢你的精彩发现!