如何在SWT中将合成项添加到滚动的容器合成中

时间:2016-02-18 12:29:37

标签: java swt jfreechart

我正在尝试创建一个可滚动的容器窗口,我可以根据不同文件中的某些值添加JFreeChart步骤图表,一个在另一个下面,但我遇到了一些问题。其中一个是我无法做到的事实 将ChartComposite对象放在容器中,一旦我运行程序,它就会显示一个空窗口。我肯定做错了什么,但老实说我不知道​​应该怎么做。

这是关于我如何尝试将一些图表放入容器的代码。

public void createPartControl(Composite parent) {

    final ScrolledComposite scrolled = new ScrolledComposite(parent, SWT.V_SCROLL);
    Composite comp = new Composite(scrolled, SWT.NONE);
    scrolled.setLayout(new FillLayout(SWT.VERTICAL));

    final JFreeChart chart = createChart();
    final JFreeChart chart1 = createChart();
    final JFreeChart chart2 = createChart();
    final JFreeChart chart3 = createChart();

    new ChartComposite(comp, SWT.NONE, chart, true);
    new ChartComposite(comp, SWT.NONE, chart1, true);
    new ChartComposite(comp, SWT.NONE, chart2, true);
    new ChartComposite(comp, SWT.NONE, chart3, true);

    comp.setLayout(new FillLayout(SWT.VERTICAL));

    scrolled.setContent(comp);

    scrolled.setExpandVertical(true);
    scrolled.setExpandHorizontal(true);

    scrolled.setAlwaysShowScrollBars(true);

    scrolled.addControlListener(new ControlAdapter() {
        public void controlResized(ControlEvent e) {
            org.eclipse.swt.graphics.Rectangle r = scrolled.getClientArea();
            scrolled.setMinSize(parent.computeSize(r.width, SWT.DEFAULT));
        }
    });

}

任何帮助或链接到一些关于如何做这样的事情的好教程都是受欢迎的。

编辑:尝试了一下ScrolledComposite,相应地修改了代码,但它扩展了图表以适应整个视图,并不是可滚动的。

1 个答案:

答案 0 :(得分:1)

以下是适合您的工作示例:

public static void main( String[] args ) {
  Display display = new Display();
  Shell shell = new Shell( display );
  shell.setLayout( new FillLayout() );
  ScrolledComposite scrolled = new ScrolledComposite( shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL );
  scrolled.setExpandVertical( true );
  scrolled.setExpandHorizontal( true );
  scrolled.setAlwaysShowScrollBars( true );
  Composite composite = new Composite( scrolled, SWT.NONE );
  composite.setLayout( new FillLayout( SWT.VERTICAL ) );
  for( int i = 0; i < 6; i++ ) {
    Composite item = new Composite( composite, SWT.NONE );
    item.setBackground( item.getDisplay().getSystemColor( SWT.COLOR_BLACK + i ) );
  }
  scrolled.setContent( composite );
  scrolled.setMinSize( composite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
  scrolled.addControlListener( new ControlAdapter() {
    public void controlResized( ControlEvent event ) {
      Rectangle clientArea = scrolled.getClientArea();
      scrolled.setMinSize( composite.computeSize( clientArea.width, SWT.DEFAULT ) );
    }
  } );
  shell.setSize( 300, 300 );
  shell.open();
  while( !shell.isDisposed() ) {
    if( !display.readAndDispatch() )
      display.sleep();
  }
  display.dispose();
}

item代表您的CharComposite。如果没有显示已发布的结果,您需要修改ChartComposite::computeSize()实施或使用单个列柱GridLayout并通过GridData::widthHint和{{1}控制图表的大小}。