我正在尝试创建一个传奇,我想要的方式是有两个独立的组合,一个在scrolledComposite内部的另一个顶部。顶部的复合子对象是标签和画布的另一个复合体。此组合是从属性文件填充的。第二个组合与第一个相同,子组合是相同类型的组合。我怎样才能做到这一点。下面的代码所做的是,当文件被读取时,它生成新的组合并填充主组合。我希望最后三个图例项与第一个图例项分开,并作为第一个复合项。
@Override
public void createPartControl(Composite parent)
{
display = parent.getDisplay();
parent.setLayout(new FillLayout());
// This enables the display to be able to be scrollable when needed
scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.BORDER);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
// making a new composite inside of the scrolledComposite to be to add labels and canvases
stepComposite = new Composite(scrolledComposite, SWT.NONE);
blockedComposite = new Composite(scrolledComposite, SWT.NONE);
// making the layout for the composite a row so when the the children reach the end of the shell
// the children will wrap down to the next level
RowLayout layout = new RowLayout();
layout.pack = false;
layout.spacing = 5;
stepComposite.setLayout(layout);
blockedComposite.setLayout(layout);
}
/**
* Adding a new composite for a rectangle and label to be added to the legend
* @param legendMessage
*/
public static void addNewComposite(String legendMessage, int compositePosition)
{
final String message = legendMessage;
final String[] s = message.split(",");
final int position = compositePosition;
if (display != null)
{
display.syncExec(new Runnable()
{
@Override
public void run()
{
Composite com;
if (position == 1)
{
com = new Composite(blockedComposite, SWT.NONE);
}
else
{
com = new Composite(stepComposite, SWT.NONE);
}
// Composite com = new Composite(stepComposite, SWT.NONE);
com.setLayout(new GridLayout(2, false));
// Creating the color using the RBG values
final Color color =
new Color(display, Integer.parseInt(s[0]), Integer.parseInt(s[1]), Integer.parseInt(s[2]));
// Creating a canvas for which the rectangle can be drawn on
Canvas canvas = new Canvas(com, SWT.NONE);
canvas.setLayoutData(new GridData(50,40));
// TODO Maybe set the bounds of the canvas
canvas.addPaintListener(new PaintListener()
{
public void paintControl(PaintEvent e)
{
e.gc.drawRectangle(1, 1, 48, 38);
e.gc.setBackground(color);
e.gc.fillRectangle(2, 2, 47, 37);
}
});
// Creating a label and setting the font
Label label = new Label(com, SWT.NULL);
final Font boldFont = new Font(label.getDisplay(), new FontData("Arial", 12, SWT.BOLD));
label.setFont(boldFont);
label.setText(s[3]);
// Adding a color and font disposer to the composite
com.addDisposeListener(new DisposeListener()
{
public void widgetDisposed(DisposeEvent e)
{
color.dispose();
boldFont.dispose();
}
});
// Adding the composite into a map to be able to be deleted when model stops
comps.put(s[3], com);
if (position == 1)
{
// scrolledComposite.setContent(blockedComposite);
// scrolledComposite.setMinSize(blockedComposite.computeSize(1, 1000));
}
else
{
scrolledComposite.setContent(stepComposite);
scrolledComposite.setMinSize(stepComposite.computeSize(1, 1000));
}
// Adding the composite to the scrolledComposite to be able to appear
// scrolledComposite.setContent(stepComposite);
// Setting the size of the scrolledComposite
// scrolledComposite.setMinSize(stepComposite.computeSize(1, 1000));
}
});
}
}这段代码用第二个组合替换了第一个组合,我希望有一些新的观点来帮助我解决这个问题。
发布于 2017-07-14 15:18:23
ScrolledComposite仅显示您在setContent上指定的Composite,您不能在该级别拥有多个组合。
使用一个Composite作为ScrolledComposite的直接子对象,并将其他组合添加为该单个组合的子对象。不要忘记在所有的组合上设置一个布局。
https://stackoverflow.com/questions/45087855
复制相似问题