简体   繁体   English

如何在Eclipse RCP插件的同一视图中删除当前显示的barchart(jfreechart)并显示新的barchart?

[英]How to delete the present barchart(jfreechart) displayed and display new barchart in a same view of eclipse RCP plugin?

I am creating barchart in a view of RCP plugin. 我正在RCP插件视图中创建条形图。 The data to be displayed in the graph comes from the sqlite3 database file. 图中显示的数据来自sqlite3数据库文件。 The code I have written displays the barchart onto the view based on the date provided as input which we can select by using calender. 我编写的代码基于输入的日期将条形图显示在视图上,我们可以使用日历选择输入的日期。 sqlite3 connects to the database file and queries based on the date and gets the barchart data. sqlite3连接到数据库文件并根据日期进行查询,并获取条形图数据。 Jfreechart is used to create the barchart and ChartComposite displays it onto the view. Jfreechart用于创建条形图,ChartComposite将其显示在视图上。

The problem is when I select multiple dates one after another and ask to display, all the graphs are displayed on the same view, which i dont require. 问题是当我一个接一个地选择多个日期并要求显示时,所有图形都显示在同一视图上,而我并不需要。 the output must be as follows, when i select the date for second time, the present graph must be deleted and new graph must be displayed. 输出必须如下,当我第二次选择日期时,必须删除当前图表并显示新图表。 I tried to add dispose() in the code but its not working. 我试图在代码中添加dispose(),但无法正常工作。

Following is my code for the same, 以下是我的相同代码,

public class BarChartDisplay extends ViewPart { 公共类BarChartDisplay扩展了ViewPart {

Text searchfield = null;
String path = SelectDataBase.path;
public static int error=0;
public static int info=0;
public static int critical=0;
public static int warning=0;



public BarChartDisplay() {
    // TODO Auto-generated constructor stub
}

@Override
public void createPartControl(Composite parent) {
    // TODO Auto-generated method stub

    //Composite A:
    final Composite mainComposite = new Composite(parent, SWT.NONE);
    GridData mainLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    mainLayoutData.horizontalSpan = 1;
    mainComposite.setLayoutData(mainLayoutData);
    GridLayout outerLayout = new GridLayout();
    outerLayout.marginTop = 30;
    outerLayout.marginLeft = 20;
    outerLayout.marginRight = 20;
    mainComposite.setLayout(outerLayout);

    //Composite B:
    final Composite selectComposite = new Composite(mainComposite, SWT.NONE);
    GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
    layoutData.horizontalSpan = 1;
    selectComposite.setLayoutData(layoutData);
    GridLayout layout = new GridLayout(4, false);
    selectComposite.setLayout(layout);

    //Composite C:
    final Composite barchartComposite = new Composite(mainComposite, SWT.NONE);
    GridData layoutData2 = new GridData(SWT.FILL, SWT.FILL, true, true);
    layoutData2.horizontalSpan = 1;
    barchartComposite.setLayoutData(layoutData2);
    GridLayout layout2 = new GridLayout(1, false);
    barchartComposite.setLayout(layout2); 


    final CalendarCombo ccombo = new CalendarCombo(selectComposite, SWT.READ_ONLY | SWT.FLAT);
    GridData layoutDataCal = new GridData(150, 40);

    ccombo.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    ccombo.showCalendar();
    ccombo.setLayoutData(layoutDataCal);


    org.eclipse.swt.widgets.Button button = new org.eclipse.swt.widgets.Button(selectComposite, SWT.PUSH);
    button.setText("Go");



button.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
      switch (e.type) {
      case SWT.Selection:

        error = 0;
        info = 0;
        warning = 0;
        critical = 0;

        DB db = new DB();
        Connection conn = null;
        conn = db.ConnTable(path);
        Statement statement;
        try {
            statement = conn.createStatement();
            String query = null;
            String textfielddata = ccombo.getDateAsString();

            System.out.println(textfielddata);

            query = "select priority from log where creation_date = '"+ textfielddata +"'";


            System.out.println(query);
            ResultSet rs = statement.executeQuery(query);

            while (rs.next()) {

                int  prioritydata = rs.getInt("priority");

                if (prioritydata == 1)
                    error++;
                else if (prioritydata == 2)
                    info++;
                else if (prioritydata == 3)
                    warning++;
                else if (prioritydata == 4)
                    critical++;
            }


        } catch (SQLException er) {
            // TODO Auto-generated catch block
            er.printStackTrace();
        }

        System.out.println("after query");          


      final CategoryDataset dataset = createDataset();
      final JFreeChart chart = createChart(dataset);

      ChartComposite frame = new ChartComposite(barchartComposite,SWT.NONE,chart,true);       

      frame.setLayoutData(new GridData(GridData.FILL_BOTH));
      frame.pack();
      frame.setVisible(true);
      frame.setChart(chart);
      frame.forceRedraw();
      barchartComposite.getLayout();

      break;
      }
    }
  });


}

 /**
 * Returns a sample dataset.
 * 
 * @return The dataset.
 */
private CategoryDataset createDataset() {

    // row keys...
    final String series1 = "First";


    // column keys...
    final String category1 = "error";
    final String category2 = "info";
    final String category3 = "warning";
    final String category4 = "critical";


    // create the dataset...
    final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    dataset.addValue(10, series1, category1);
    dataset.addValue(5, series1, category2);
    dataset.addValue(6, series1, category3);
    dataset.addValue(9, series1, category4);


    return dataset;

}

/**
 * Creates a sample chart.
 * 
 * @param dataset  the dataset.
 * 
 * @return The chart.
 */
private JFreeChart createChart(final CategoryDataset dataset) {

    // create the chart...
    final JFreeChart chart = ChartFactory.createBarChart(
        "Priority BarChart",         // chart title
        "priority",               // domain axis label
        "Value",                  // range axis label
        dataset,                  // data
        PlotOrientation.VERTICAL, // orientation
        true,                     // include legend
        true,                     // tooltips?
        false                     // URLs?
    );

    // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

    // set the background color for the chart...
    chart.setBackgroundPaint(Color.white);

    // get a reference to the plot for further customisation...
    final CategoryPlot plot = chart.getCategoryPlot();
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);

    // set the range axis to display integers only...
    final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

    // disable bar outlines...
    final BarRenderer renderer = (BarRenderer) plot.getRenderer();
    renderer.setDrawBarOutline(false);

    // set up gradient paints for series...
    final GradientPaint gp0 = new GradientPaint(
        0.0f, 0.0f, Color.blue, 
        0.0f, 0.0f, Color.lightGray
    );

    renderer.setSeriesPaint(0, gp0);


    final CategoryAxis domainAxis = plot.getDomainAxis();
    domainAxis.setCategoryLabelPositions(
        CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
    );
    // OPTIONAL CUSTOMISATION COMPLETED.

    return chart;

}   

@Override
public void setFocus() {
    // TODO Auto-generated method stub

}

} }

您不需要处理图表,只需使用新选择的日期重新创建数据集,然后使用chart.getPlot().setDataset(new_dataset)刷新具有新数据的图表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM