2014-02-07 35 views
3

在条形图中,我想为每种颜色(或分段)使用超链接。为了做到这一点,我需要使用图像映射(使用Jfree图表)。 我的代码是通过Jfree图表创建图像,但我也希望单独使用每个颜色代码的超链接。 你能请指教我如何从基于颜色代码或行键或列键的Jfree图表的图像获取坐标。如何从Jfree图表中获取图像地图

公共类演示 {

public static void main(String arg[]) throws IOException{ 

    DefaultCategoryDataset result = new DefaultCategoryDataset(); 

    result.addValue(20.3, "Apraisal Forms", "Dtest"); 
     result.addValue(19.4, "Resignation Form", "Dtest"); 
     result.addValue(16.5, "HES forms", "Dtest"); 
     result.addValue(8, "Feedback forms", "Dtest"); 

     result.addValue(27.2, "Apraisal Forms", "HR Dept"); 
     result.addValue(5.9, "Resignation Form", "HR Dept"); 
     result.addValue(14.4, "Feedback forms", "HR Dept"); 
     result.addValue(4, "HES forms", "HR Dept"); 

    JFreeChart chart = ChartFactory.createStackedBarChart3D("overview by Departments", "x label", "Message Count", result, PlotOrientation.VERTICAL, true, true, true); 

    ChartUtilities.saveChartAsJPEG(new File("D:\\chart.jpg"), chart, 500, 300); 
     } 
    } 
+0

我可以通过>> ChartUtilities.getImageMap(“chart”,info); ************************************************* ******** 但它返回像这样的字符串>>> ************* ********************************************* 但我想添加我自己的HREF值。所以我怎么能做到这一点,而不是做PITY代码(通过将href旧值替换为新值)? – user3029929

回答

1

我把它通过实施ToolTipTagFragmentGeneratorURLTagFragmentGenerator完成。这里是完整的代码:

public class Demo { 

    public static void main(String arg[]) throws IOException { 

     DefaultCategoryDataset result = new DefaultCategoryDataset(); 
     result.addValue(20.3, "Apraisal Forms", "Dtest"); 
     result.addValue(19.4, "Resignation Form", "Dtest"); 
     result.addValue(16.5, "HES forms", "Dtest"); 
     result.addValue(8, "Feedback forms", "Dtest"); 

     result.addValue(27.2, "Apraisal Forms", "HR Dept"); 
     result.addValue(5.9, "Resignation Form", "HR Dept"); 
     result.addValue(14.4, "Feedback forms", "HR Dept"); 
     result.addValue(4, "HES forms", "HR Dept"); 

     result.addValue(18.4, "Resignation Form", "Admin Dept"); 
     result.addValue(16.1, "HES forms", "Admin Dept"); 
     result.addValue(13.7, "Feedback forms", "Admin Dept"); 

     JFreeChart chart = ChartFactory.createStackedBarChart3D(
      "overview by Departments", "x label", "Message Count", result, 
      PlotOrientation.VERTICAL, true, true, true); 

     SubCategoryAxis domainAxis = new SubCategoryAxis("Name of Department"); 
     domainAxis.setCategoryMargin(0.60); 

     CategoryPlot plot = chart.getCategoryPlot(); 
     plot.setDomainAxis(domainAxis); 

     String map = ""; 

     ChartRenderingInfo info = new ChartRenderingInfo(
      new StandardEntityCollection()); 

     try { 
      ByteArrayOutputStream out = new ByteArrayOutputStream(); 
      ChartUtilities.writeChartAsPNG(out, chart, 600, 400, info); 

      ToolTipTagFragmentGenerator tooltipConstructor = new ToolTipTagFragmentGenerator() { 
       public String generateToolTipFragment(String arg0) { 
        String toolTip = " title = \"value" + arg0 + "\""; 
        return (toolTip); 
       } 
      }; 

      URLTagFragmentGenerator urlConstructor = new URLTagFragmentGenerator() { 
       public String generateURLFragment(String arg0) { 
        String address = " href=\"ControllerAddress\\methodName?" 
         + arg0 + "\""; 
        return (address); 
       } 
      }; 

      map = ChartUtilities.getImageMap("chart", info, tooltipConstructor, 
       urlConstructor); 
      out.close(); 
     } catch (IOException e) { 
      System.out.println(e); 
     } 
     System.out.println(map); 
     ChartFrame frame1 = new ChartFrame("Bar Chart", chart); 
     frame1.setVisible(true); 
     frame1.setSize(600, 350); 
    } 
}