在SWT中将JFreeChart ChartComposite设置为固定大小

时间:2016-02-19 09:52:54

标签: java swt jfreechart

我试图将JFree步骤图添加到eclipse中的可滚动视图作为插件,但每次修改视图的维度时,图表会不断调整大小(有点随机)。

我想将它们设置为固定大小,无论视图大小都是如此(这就是为什么我首先可以滚动它)所以我尝试过这样的事情:

public void createPartControl(final Composite parent) {
    ScrolledComposite scrolled = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);        

    Composite comp = new Composite(scrolled, SWT.NONE);
    comp.setLayout(new FillLayout(SWT.VERTICAL));

    final JFreeChart chart = createChart();

    ChartComposite chartComposite1 = new ChartComposite(comp, SWT.NONE, chart, true);

    // set chart size attempt 

    chartComposite1.setSize(500, 200);
    chartComposite1.redraw();
    comp.redraw();
    scrolled.redraw();

    // ScrolledComposite stuff

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

但它没有做任何事情。当我修改视图的大小时,图表会自动调整大小。

任何帮助?

1 个答案:

答案 0 :(得分:1)

确保您不知道布局在SWT中的工作方式。 Understanding Layouts in SWT是一个好的开始。

chartComposite1.setSize()没用,它将被comp.setLayout( ... )中设置的布局覆盖

...并强制控制redraw()并不会有帮助,因为它不会更新控件的位置或大小。

As I suggested earlier,如果你知道图表的大小,请使用一个圆柱GridLayout并通过GridData::widthHintheightHint来控制图表的大小。