Java 如何向SWT中的滚动容器组合添加组合

Java 如何向SWT中的滚动容器组合添加组合,java,swt,jfreechart,Java,Swt,Jfreechart,我正在尝试创建一个可滚动的容器窗口,我可以根据不同文件中的一些值,在其中逐个添加JFreeChart步骤图,但我遇到了几个问题。其中之一就是我不能 要将ChartComposite对象放入容器中,一旦我运行程序,它将显示一个空窗口。我肯定做错了什么,但我真的不知道该怎么做 下面是我如何将一些图表放入容器的代码 public void createPartControl(Composite parent) { final ScrolledComposite scrolled = new

我正在尝试创建一个可滚动的容器窗口,我可以根据不同文件中的一些值,在其中逐个添加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做了一些尝试,相应地修改了代码,但它扩展了图表以适应整个视图,并且绝不是可滚动的。

下面是一个可供您调整的工作示例:

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();
}
publicstaticvoidmain(字符串[]args){
显示=新显示();
外壳=新外壳(显示);
setLayout(新的FillLayout());
ScrolledComposite scrolled=新的ScrolledComposite(shell,SWT.BORDER | SWT.H|u SCROLL | SWT.V|u SCROLL);
滚动。setExpandVertical(true);
滚动。setExpandHorizontal(true);
scrolled.setAlwaysShowScrollBars(true);
复合材料=新复合材料(滚动,SWT.NONE);
复合.setLayout(新的FillLayout(SWT.VERTICAL));
对于(int i=0;i<6;i++){
组合项目=新组合(组合,SWT.NONE);
item.setBackground(item.getDisplay().getSystemColor(SWT.COLOR_BLACK+i));
}
滚动的.setContent(复合);
scrolled.setMinSize(composite.computeSize(SWT.DEFAULT,SWT.DEFAULT));
scrolled.addControlListener(新的ControlAdapter(){
公共无效控件已调整大小(ControlEvent事件){
矩形clientArea=滚动的.getClientArea();
scrolled.setMinSize(composite.computeSize(clientArea.width,SWT.DEFAULT));
}
} );
外壳。设置尺寸(300300);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

s表示您的
CharComposite
s。如果未显示所需的结果,则需要修改
ChartComposite::computeSize()
实现,或使用单列
GridLayout
并通过
GridData::widthHint
heightHint
控制图表的大小以下是一个可供您调整的工作示例:

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();
}
publicstaticvoidmain(字符串[]args){
显示=新显示();
外壳=新外壳(显示);
setLayout(新的FillLayout());
ScrolledComposite scrolled=新的ScrolledComposite(shell,SWT.BORDER | SWT.H|u SCROLL | SWT.V|u SCROLL);
滚动。setExpandVertical(true);
滚动。setExpandHorizontal(true);
scrolled.setAlwaysShowScrollBars(true);
复合材料=新复合材料(滚动,SWT.NONE);
复合.setLayout(新的FillLayout(SWT.VERTICAL));
对于(int i=0;i<6;i++){
组合项目=新组合(组合,SWT.NONE);
item.setBackground(item.getDisplay().getSystemColor(SWT.COLOR_BLACK+i));
}
滚动的.setContent(复合);
scrolled.setMinSize(composite.computeSize(SWT.DEFAULT,SWT.DEFAULT));
scrolled.addControlListener(新的ControlAdapter(){
公共无效控件已调整大小(ControlEvent事件){
矩形clientArea=滚动的.getClientArea();
scrolled.setMinSize(composite.computeSize(clientArea.width,SWT.DEFAULT));
}
} );
外壳。设置尺寸(300300);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

s表示您的
CharComposite
s。如果没有显示所需的结果,则需要修改
ChartComposite::computeSize()
实现,或者使用单列
GridLayout
并通过
GridData::widthHint
heightHint

控制图表的大小。在SWT中,一个可滚动的容器被称为
Scrolled Composite
,其中显示了一些如何使用此小部件的示例。同时,我找到了组容器,可以通过设置其样式来创建。现在的问题是ChartComposites会自动调整大小,以便在一个窗口中容纳所有图表,这意味着如果我说有20个图表,它们会被压扁。你知道我是否可以将它们添加到图表面板中,我可以设置它的尺寸?如果你提到
Group
小部件,请注意这个小部件是不可滚动的。小部件的JavaDoc列出了适用的样式标志。只有继承可滚动的
控件才能提供滚动条。使用一个
ScrolledComposite
,只需添加ScrolledComposite scrolled=newScrolledComposite(父级,SWT.V_SCROLL);新的ChartComposite(滚动,SWT.NONE,chart,true);似乎不起作用,因为它显示一个空窗口。我想我必须看一下这些片段。使用滚动复合修改了代码,但图表似乎自动调整大小以填充视图,使视图不可滚动。在SWT中,一个可滚动的容器称为
ScrolledComposite
,显示了一些如何使用此小部件的示例。同时,我找到了组容器,可以通过设置其样式来创建。现在的问题是ChartComposites会自动调整大小,以便在一个窗口中容纳所有图表,这意味着如果我说有20个图表,它们会被压扁。你知道我是否可以将它们添加到图表面板中,我可以设置它的尺寸?如果你提到
Group
小部件,请注意这个小部件是不可滚动的。小部件的JavaDoc列出了适用的样式标志。只有继承可滚动的
控件才能提供滚动条。使用一个
ScrolledComposite
,只需添加ScrolledComposite scrolled=newScrolledComposite(父级,SWT.V_SCROLL);