首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ScrolledComposite中包含两个复合体

在ScrolledComposite中包含两个复合体
EN

Stack Overflow用户
提问于 2017-07-14 01:54:16
回答 1查看 241关注 0票数 0

我正在尝试创建一个传奇,我想要的方式是有两个独立的组合,一个在scrolledComposite内部的另一个顶部。顶部的复合子对象是标签和画布的另一个复合体。此组合是从属性文件填充的。第二个组合与第一个相同,子组合是相同类型的组合。我怎样才能做到这一点。下面的代码所做的是,当文件被读取时,它生成新的组合并填充主组合。我希望最后三个图例项与第一个图例项分开,并作为第一个复合项。

代码语言:javascript
复制
@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));
        }
     });
  }
}

这段代码用第二个组合替换了第一个组合,我希望有一些新的观点来帮助我解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 15:18:23

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45087855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档