将GWT可视化的y轴格式从毫秒更改为hr:min:sec

将GWT可视化的y轴格式从毫秒更改为hr:min:sec,gwt,formatting,google-visualization,Gwt,Formatting,Google Visualization,我目前正在使用GWT可视化库生成显示一组作业运行时的折线图。时间值以毫秒为单位,我希望图表以hr:min:sec格式显示y轴标签,而不是以毫秒为单位。我使用了setFormattedValue方法进行此转换,但不幸的是,只有工具提示值显示格式化值,而y轴以毫秒为单位继续显示 这是我的密码: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import com.electriccl

我目前正在使用GWT可视化库生成显示一组作业运行时的折线图。时间值以毫秒为单位,我希望图表以hr:min:sec格式显示y轴标签,而不是以毫秒为单位。我使用了setFormattedValue方法进行此转换,但不幸的是,只有工具提示值显示格式化值,而y轴以毫秒为单位继续显示

这是我的密码:

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

import com.electriccloud.commander.gwt.client.util.CommanderUrlBuilder;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.visualization.client.AbstractDataTable;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.VisualizationUtils;
import com.google.gwt.visualization.client.visualizations.Table;
import com.google.gwt.visualization.client.visualizations.corechart.HorizontalAxisOptions;
import com.google.gwt.visualization.client.visualizations.corechart.LineChart;




public class ScheduledJobMonitorFancyChartPanel extends HorizontalPanel{

    protected static final int MS = 0;
    protected static final int HR_MIN_SEC = 1;
    private String scheduleName;
    private HashMap<String, AverageElapsedTime> elapsedTimeData;
    private Table dataTable;
    private LineChart lineChart;
    private boolean graphIsVisible = true;
    private int displayStyle;


    public ScheduledJobMonitorFancyChartPanel(){
        super();
        this.setStyleName("hidden");
    }

    public ScheduledJobMonitorFancyChartPanel(String schedName, HashMap<String, AverageElapsedTime> data, int displayType){
        this();
        this.scheduleName = schedName;
        this.elapsedTimeData = data;
        this.displayStyle = displayType;
        createTableAndChart();
        this.setVisible(graphIsVisible);
    }

    private void createTableAndChart(){
        // this block defines the table and chart
        Runnable onLoadCallback = new Runnable() {
            public void run() {
                VerticalPanel outterPanel = new VerticalPanel();
                Label chartTitle = new Label("ElapsedTime Data for " + scheduleName);
                chartTitle.setStylePrimaryName("chartTitle");
                outterPanel.add(chartTitle);
                HorizontalPanel allChartGroups = new HorizontalPanel();
                    allChartGroups.setStylePrimaryName("allChartGroupsStyle");

                // Since a single Job may have multiple steps being monitored, this creates the charts 
                // for each step, but groups them all (horizontally) under the same job
                Collection<String> c = elapsedTimeData.keySet();
                Iterator<String> itr = c.iterator();

                while(itr.hasNext()){
                    String stepName = itr.next();
                    AverageElapsedTime aet = elapsedTimeData.get(stepName);
                    AbstractDataTable linkableTable = createTableWithLinks(aet);
                    AbstractDataTable table = createTable(aet);

                    dataTable = new Table(linkableTable, createDataTableOptions()); 
                        dataTable.setStylePrimaryName("dataTableStyle");

                    lineChart = new LineChart(table, createLineChartOptions(stepName));
                        lineChart.setStylePrimaryName("lineChartStyle");


                    HorizontalPanel tableAndChartGroup = new HorizontalPanel();
                        tableAndChartGroup.setStylePrimaryName("tableAndChartGroup");
                        tableAndChartGroup.add(dataTable);
                        tableAndChartGroup.add(lineChart);

                    allChartGroups.add(tableAndChartGroup);
                }

                outterPanel.add(allChartGroups);
                addToPanel(outterPanel);
            }
        };
        // this line gets the table/chart defined above displayed on the screen
        VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE, Table.PACKAGE);
    }

    // Because the table/chart is created inside an annonymous Runnable object, this method
    // exposes it to being added to "this"
    private void addToPanel(Widget widget){
        this.add(widget);
    }

    // set up the table used by the LineChart
    private AbstractDataTable createTable(AverageElapsedTime aet){
        DataTable data = DataTable.create();

        data.addColumn(ColumnType.STRING, "JobId");
        data.addColumn(ColumnType.NUMBER, "ElapsedTime");

        data.addRows(aet.getSize());

        HashMap<Long, Long> jobIdElapsedTimeHash = aet.getListOfTimes();
        Collection<Long> c = jobIdElapsedTimeHash.keySet();
        Iterator<Long> itr = c.iterator();
        int row = 0;
        while(itr.hasNext()){
            Long jobId = itr.next();
            data.setValue(row, 0, jobId.toString());
            if(this.displayStyle == ScheduledJobMonitorFancyChartPanel.MS)
                data.setValue(row, 1, jobIdElapsedTimeHash.get(jobId));
            else if(this.displayStyle == ScheduledJobMonitorFancyChartPanel.HR_MIN_SEC){
                data.setValue(row, 1, jobIdElapsedTimeHash.get(jobId));
                String formattedValue = AverageElapsedTime.getDisplayTime(jobIdElapsedTimeHash.get(jobId));
                data.setFormattedValue(row, 1, formattedValue);
            }
            row++;
        }

        return data;
    }

    // set up the table used by the DataTable - It embeds links to the jobId listed
    private AbstractDataTable createTableWithLinks(AverageElapsedTime aet){
        DataTable data = DataTable.create();

        data.addColumn(ColumnType.STRING, "JobId");
        data.addColumn(ColumnType.NUMBER, "ElapsedTime");

        data.addRows(aet.getSize());

        HashMap<Long, Long> jobIdElapsedTimeHash = aet.getListOfTimes();
        Collection<Long> c = jobIdElapsedTimeHash.keySet();
        Iterator<Long> itr = c.iterator();
        String urlBase = CommanderUrlBuilder.getBase();
        int row = 0;
        while(itr.hasNext()){
            Long jobId = itr.next();
            data.setValue(row, 0, "<a href='" + urlBase + "link/jobDetails/jobs/" + jobId + "' target='_blank'>" + jobId + "</a>");
//          data.setValue(row, 1, jobIdElapsedTimeHash.get(jobId));
            if(this.displayStyle == ScheduledJobMonitorFancyChartPanel.MS)
                data.setValue(row, 1, jobIdElapsedTimeHash.get(jobId));
            else if(this.displayStyle == ScheduledJobMonitorFancyChartPanel.HR_MIN_SEC){
                data.setValue(row, 1, jobIdElapsedTimeHash.get(jobId));
                String formattedValue = AverageElapsedTime.getDisplayTime(jobIdElapsedTimeHash.get(jobId));
                data.setFormattedValue(row, 1, formattedValue);
            }
            row++;
        }

        return data;
    }

    // set the options for the DataTable
    private Table.Options createDataTableOptions(){
        Table.Options options = Table.Options.create();
        options.setHeight("300");
        options.setWidth("190");
        options.setAllowHtml(true);
        return options;
    }


    // set the options for the LineChart
    private com.google.gwt.visualization.client.visualizations.corechart.Options createLineChartOptions(String stepName){
        com.google.gwt.visualization.client.visualizations.corechart.Options options = com.google.gwt.visualization.client.visualizations.corechart.Options.create();
        options.setWidth(500);
        options.setHeight(300);
        options.setCurveType("function");
        options.setColors("#336E95");
        options.setTitle(stepName);
        HorizontalAxisOptions hao = HorizontalAxisOptions.create();
        hao.setSlantedText(true);
        hao.setSlantedTextAngle(45);
        options.setHAxisOptions(hao);
        return options;
    }

    public void setTimeDisplay(int displayType) {
        switch(displayType){
        case 0:
            break;
        case 1:
            this.displayStyle = ScheduledJobMonitorFancyChartPanel.HR_MIN_SEC;
        }

    }
}
import java.util.Collection;
导入java.util.HashMap;
导入java.util.Iterator;
导入com.electriccloud.commander.gwt.client.util.CommanderUrlBuilder;
导入com.google.gwt.user.client.ui.HorizontalPanel;
导入com.google.gwt.user.client.ui.Label;
导入com.google.gwt.user.client.ui.VerticalPanel;
导入com.google.gwt.user.client.ui.Widget;
导入com.google.gwt.visualization.client.AbstractDataTable;
导入com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
导入com.google.gwt.visualization.client.DataTable;
导入com.google.gwt.visualization.client.VisualizationUtils;
导入com.google.gwt.visualization.client.visualizations.Table;
导入com.google.gwt.visualization.client.visualizations.corechart.HorizontalAxisOptions;
导入com.google.gwt.visualization.client.visualizations.corechart.LineChart;
公共类ScheduledJobMonitorFancyChartPanel扩展了HorizontalPanel{
受保护的静态最终整数MS=0;
受保护的静态最终整数HR\u MIN\u SEC=1;
私有字符串scheduleName;
私有HashMap elapsedTimeData;
私有表数据表;
私人线形图;
私有布尔graphIsVisible=true;
私人int显示风格;
公共调度ObjMonitorFancychartPanel(){
超级();
本文件名(“隐藏”);
}
公共ScheduledJobMonitorFancyChartPanel(字符串schedName、HashMap数据、int displayType){
这个();
this.scheduleName=schedName;
this.elapsedTimeData=数据;
this.displayStyle=displayType;
createTableAndChart();
此.setVisible(图形可见);
}
私有void createTableAndChart(){
//此块定义表格和图表
Runnable onLoadCallback=new Runnable(){
公开募捐{
VerticalPanel outterPanel=新的VerticalPanel();
标签chartTitle=新标签(“ElapsedTime数据用于”+scheduleName);
chartTitle.setStylePrimaryName(“chartTitle”);
outterPanel.add(图表标题);
HorizontalPanel allChartGroups=新建HorizontalPanel();
allChartGroups.setStylePrimaryName(“allChartGroupsStyle”);
//由于单个作业可能有多个步骤被监控,因此会创建图表
//对于每个步骤,但将它们全部(水平)分组到同一作业下
集合c=elapsedTimeData.keySet();
迭代器itr=c.Iterator();
while(itr.hasNext()){
字符串stepName=itr.next();
AverageElapsedTime aet=elapsedTimeData.get(步骤名称);
AbstractDataTable linkableTable=createTableWithLinks(aet);
AbstractDataTable=createTable(aet);
dataTable=新表(linkableTable,createDataTableOptions());
setStylePrimaryName(“dataTableStyle”);
线形图=新线形图(表,createLineChartOptions(stepName));
lineChart.setStylePrimaryName(“lineChartStyle”);
HorizontalPanel tableAndChartGroup=新建HorizontalPanel();
tableAndChartGroup.setStylePrimaryName(“tableAndChartGroup”);
tableAndChartGroup.add(dataTable);
tableAndChartGroup.add(折线图);
添加(tableAndChartGroup);
}
添加(所有图表组);
addToPanel(外部面板);
}
};
//此行获取屏幕上显示的上面定义的表格/图表
VisualizationUtils.loadVisualizationApi(onLoadCallback,LineChart.PACKAGE,Table.PACKAGE);
}
//由于表/图表是在一个无注释的可运行对象内创建的,因此此方法
//将其添加到“此”中
私有void addToPanel(小部件){
添加(小部件);
}
//设置线条图使用的表格
私有AbstractDataTable createTable(AverageLapsedTime aet){
DataTable data=DataTable.create();
data.addColumn(ColumnType.STRING,“JobId”);
data.addColumn(ColumnType.NUMBER,“ElapsedTime”);
data.addRows(aet.getSize());
HashMap JobideReleasedTimeHash=aet.getListOfTimes();
集合c=JobidReleasedTimeHash.keySet();
迭代器itr=c.Iterator();
int行=0;
while(itr.hasNext()){
Long jobId=itr.next();
data.setValue(行,0,jobId.toString());
if(this.displayStyle==ScheduledJobMonitorFancyChartPanel.MS)
setValue(行,1,JobidReleasedTimeHash.get(jobId));
else if(this.displayStyle==ScheduledJobMonitorFancyChartPanel.HR\u MIN\u SEC){
setValue(行,1,JobidReleasedTimeHash.get(jobId));
String formattedValue=AverageLapsedTime.getDisplayTime(JobidReleasedTimeHash.get(jobId));
data.setFormattedValue(第1行,formattedValue);
}
行++;
}
返回数据;
}
//设置DataTable使用的表-它嵌入到列出的jobId的链接
私有AbstractDataTable createTableWithLinks(AverageLapsedTime aet){
DataTable data=DataTable.create();
data.addColumn(ColumnType.STRING,“JobId”);
data.addColumn(ColumnType.NUMBER,