将java SWT图表保存到图像

将java SWT图表保存到图像,java,eclipse,save,swt,swtchart,Java,Eclipse,Save,Swt,Swtchart,我有一个使用org.eclipse.swtchart()的java应用程序。我希望将输出的图表保存为.jpg或类似的图像格式,而不是显示图表,到目前为止,我不知道如何执行此操作。代码还没有完全完成,我打算让它监视CSV文件的特定文件,并从可用数据自动创建和保存图形 import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite;[ente

我有一个使用org.eclipse.swtchart()的java应用程序。我希望将输出的图表保存为.jpg或类似的图像格式,而不是显示图表,到目前为止,我不知道如何执行此操作。代码还没有完全完成,我打算让它监视CSV文件的特定文件,并从可用数据自动创建和保存图形

import org.eclipse.swt.SWT;

import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;[enter image description here][1]
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import org.eclipse.swtchart.Chart;
import org.eclipse.swtchart.IAxis;
import org.eclipse.swtchart.IAxisSet;
import org.eclipse.swtchart.IBarSeries;
import org.eclipse.swtchart.IGrid;
import org.eclipse.swtchart.ISeries.SeriesType;
import org.eclipse.swtchart.LineStyle;
import org.eclipse.swtchart.Range;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;


public class CSVBarChart[enter image description here][1] {

    private static double[] ySeries;
    private static String [] xSeries; 

    /**
     * The main method.
     * 
     * @param args
     *            the arguments
     */
    public static void main(String[] args) {

        String csvFile = "C:\\Users\\Kevin\\Desktop\\FAD-Export\\42510149_10101764726495991_5660171154099273728_o.csv";
        BufferedReader br = null;
        String line = "";
        String cvsSplitBy = ",";

        try {

            br = new BufferedReader(new FileReader(csvFile));
            for (int i = 0; i < 1; i++)
                br.readLine();
            line = br.readLine(); 

                // use comma as separator
                String[] stringSeries = line.split(cvsSplitBy);
                String[] xSeries1 = {"Face    " + stringSeries[0],
                        "Condifence    " + stringSeries[1],
                        "AU01 Inner Brow Raiser    " + stringSeries[2],
                        "AU02 Outer Brow Raiser    " + stringSeries[3],
                        "AU04 Brow Lowerer    " + stringSeries[4],
                        "AU05 Upper Lid Raiser    " + stringSeries[5],
                        "AU06 Cheek Raiser    " + stringSeries[6],
                        "AU07 Lid Tightener    " + stringSeries[7],
                        "AU09 Nose Wrinkler    " + stringSeries[8],
                        "AU10 Upper Lip Raiser    " + stringSeries[9],
                        "AU12 Lip Corner Puller    " + stringSeries[10],
                        "AU14 Dimpler    " + stringSeries[11],
                        "AU15 Lip Corner Depressor    " + stringSeries[12],
                        "AU17 Chin Raiser    " + stringSeries[13],
                        "AU20 Lip Stretcher    " + stringSeries[14],
                        "AU23 Lip Tightener    " + stringSeries[15],
                        "AU25 Lips Part    " + stringSeries[16],
                        "AU26 Jaw Drop    " + stringSeries[17],
                        "AU45 Blink    " + stringSeries[18]};
                xSeries = xSeries1;
                ySeries = Arrays.stream(stringSeries)
                        .mapToDouble(Double::parseDouble)
                        .toArray();
        }

        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("");
        shell.setSize(900, 900);
        shell.setLayout(new FillLayout());
        createChart(shell);
        shell.open();
        while(!shell.isDisposed()) {
            if(!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }


    /**
     * create the chart.
     * 
     * @param parent
     *            The parent composite
     * @return The created chart
     */
    static public Chart createChart(Composite parent) {

        // create a chart
        Chart chart = new Chart(parent, SWT.NONE);
        chart.setOrientation(SWT.VERTICAL);
        // set titles
        chart.getTitle().setText("Bar Chart");
        IAxis yAxis = chart.getAxisSet().getYAxis(0);
        yAxis.setRange(new Range(0, 5));

        IAxis xAxis = chart.getAxisSet().getXAxis(0);

        xAxis.setCategorySeries(xSeries);
        xAxis.enableCategory(true);
        xAxis.setRange(new Range(2, 20));

        IAxisSet axisSet = chart.getAxisSet();
        IGrid xGrid = axisSet.getXAxis(0).getGrid();
        xGrid.setStyle(LineStyle.NONE);


        chart.getAxisSet().getXAxis(0).getTitle().setText("Action Units");
        chart.getAxisSet().getYAxis(0).getTitle().setText("Intensity");
        // create bar series
        IBarSeries barSeries = (IBarSeries)chart.getSeriesSet().createSeries(SeriesType.BAR, "AU Intensity");
        barSeries.setYSeries(ySeries);

        return chart;
    }
import org.eclipse.swt.swt;
导入org.eclipse.swt.layout.FillLayout;
导入org.eclipse.swt.widgets.Composite;[在此处输入图像描述][1]
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swtchart.Chart;
导入org.eclipse.swtchart.IAxis;
导入org.eclipse.swtchart.IAxisSet;
导入org.eclipse.swtchart.IBarSeries;
导入org.eclipse.swtchart.IGrid;
导入org.eclipse.swtchart.ISeries.SeriesType;
导入org.eclipse.swtchart.LineStyle;
导入org.eclipse.swtchart.Range;
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
公共类CSVBarChart[在此处输入图像描述][1]{
私有静态双序列;
私有静态字符串[]x系列;
/**
*主要方法。
* 
*@param args
*争论
*/
公共静态void main(字符串[]args){
String csvFile=“C:\\Users\\Kevin\\Desktop\\FAD Export\\42510149_10101764726495991_5660171154099273728_o.csv”;
BufferedReader br=null;
字符串行=”;
字符串cvsSplitBy=“,”;
试一试{
br=新的BufferedReader(新的文件读取器(csvFile));
对于(int i=0;i<1;i++)
br.readLine();
line=br.readLine();
//使用逗号作为分隔符
String[]stringSeries=line.split(cvsSplitBy);
字符串[]xSeries1={“面”+stringSeries[0],
“条件”+stringSeries[1],
“AU01内眉毛提升器”+stringSeries[2],
“AU02外眉毛提升器”+stringSeries[3],
“AU04降眉器”+stringSeries[4],
“AU05上盖升降器”+纵梁系列[5],
“AU06面颊提升器”+stringSeries[6],
“AU07盖紧器”+纵梁系列[7],
“AU09鼻子起皱器”+stringSeries[8],
“AU10上唇提升器”+纵梁系列[9],
“AU12唇角拉拔器”+纵梁系列[10],
“AU14酒窝”+stringSeries[11],
“AU15唇形拐角压具”+stringSeries[12],
“AU17 Chin Raiser”+stringSeries[13],
“AU20唇部拉伸器”+stringSeries[14],
“AU23唇型张紧器”+纵梁系列[15],
“AU25唇部”+stringSeries[16],
“AU26颚式下降”+stringSeries[17],
“AU45闪烁”+stringSeries[18]};
xSeries=xSeries1;
ySeries=Arrays.stream(stringSeries)
.mapToDouble(Double::parseDouble)
.toArray();
}
catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(br!=null){
试一试{
br.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
显示=新显示();
外壳=新外壳(显示);
shell.setText(“”);
外壳尺寸(900900);
setLayout(新的FillLayout());
createChart(shell);
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
/**
*创建图表。
* 
*@param父级
*父组合
*@返回已创建的图表
*/
静态公共图表createChart(复合父级){
//创建图表
图表=新图表(父级,SWT.NONE);
设置方向图(SWT垂直);
//设置标题
chart.getTitle().setText(“条形图”);
IAxis-yAxis=chart.getAxisSet().getYAxis(0);
设置范围(新范围(0,5));
IAxis xAxis=chart.getAxisSet().getXAxis(0);
xAxis.setCategorySeries(X系列);
xAxis.enableCategory(真);
设置范围(新范围(2,20));
IAxisSet axisSet=chart.getAxisSet();
IGrid xGrid=axisSet.getXAxis(0.getGrid();
xGrid.setStyle(LineStyle.NONE);
chart.getAxisSet().getXAxis(0.getTitle().setText(“动作单位”);
chart.getAxisSet().getYAxis(0.getTitle().setText(“强度”);
//创建酒吧系列
IBarSeries barSeries=(IBarSeries)chart.getSeriesSet().CreateSetries(serieType.BAR,“AU强度”);
barSeries.setYSeries(ySeries);
收益表;
}

}

图表
有一个
保存
方法保存到file@greg-谢谢你!我不知道那是怎么逃过我的搜查的。为了解决这个问题,我将chart设置为一个字段,并添加了linechart.save(“barchart.jpeg”,SWT.IMAGE\ujpeg);在shell.open()下的主线程中;。我还设置shell.setVisible(false);就在chart.save下面。到目前为止,我还无法完全隐藏外壳,但这至少会持续1/2秒。