gpt4 book ai didi

java - 在 ScrolledComposite 中包含两个复合 Material

转载 作者:行者123 更新时间:2023-12-02 12:37:23 34 4
gpt4 key购买 nike

我正在尝试创建一个图例,我想要的方式是有两个单独的复合 Material ,一个位于滚动复合 Material 内部的另一个之上。顶部复合子项是标签和 Canvas 的另一个复合体。该组合是从属性文件填充的。第二个复合 Material 与第一个复合 Material 相同,其子级是相同类型的复合 Material 。我怎样才能实现这一目标。下面的代码所做的是在读取文件时,它生成新的组合并填充主组合。我希望最后三个图例项目与第一个图例项目分开并充当第一个组合。

@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));
}
});
}
}

此代码用第二个复合 Material 替换了第一个复合 Material ,我希望有新的眼光来帮助我解决问题。

最佳答案

ScrolledComposite 仅显示您在 setContent 上指定的 Composite,在该级别不能有多个组合。

使用一个 Composite 作为 ScrolledComposite 的直接子级,并将其他组合添加为该单个组合的子级。不要忘记在所有组合上设置布局。

关于java - 在 ScrolledComposite 中包含两个复合 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087855/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com