2013-04-02 1 views
2

사용자가 GUID를 처리하고 정보를 검색 할 수있는 지점을 클릭 할 때 분산 형 플롯의 각 지점에 GUID를 추가 할 수 있습니까?JfreeChart scatter plot 팝업 정보를 클릭하십시오.

편집 : 샘플을 추가

package demo; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.util.Random; 
import javax.swing.JFrame; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartMouseEvent; 
import org.jfree.chart.ChartMouseListener; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.axis.NumberTickUnit; 
import org.jfree.chart.entity.XYItemEntity; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.renderer.xy.XYItemRenderer; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 

public class ScatterMouseClick extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private static final int N = 24; 
    private static final Random rand = new Random(System.currentTimeMillis()); 
    private final XYSeries series = new XYSeries("Scatter Series"); 

    public ScatterMouseClick(String s) { 
     super(s); 
     final ChartPanel chartPanel = createDemoPanel(); 
     this.add(chartPanel, BorderLayout.CENTER); 
    } 

    private ChartPanel createDemoPanel() { 
     JFreeChart jfreechart = ChartFactory.createScatterPlot(
      "Scatter Mouse click Demo", "X", "Y", createSampleData(), 
      PlotOrientation.VERTICAL, true, true, false); 
     XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); 
     xyPlot.setDomainCrosshairVisible(true); 
     xyPlot.setRangeCrosshairVisible(true); 
     XYItemRenderer renderer = xyPlot.getRenderer(); 
     renderer.setSeriesPaint(0, Color.blue); 
     adjustAxis((NumberAxis) xyPlot.getDomainAxis(), true); 
     adjustAxis((NumberAxis) xyPlot.getRangeAxis(), false); 
     xyPlot.setBackgroundPaint(Color.white); 
     ChartPanel chartPanel = new ChartPanel(jfreechart); 
     chartPanel.addChartMouseListener(new ChartMouseListener() { 
      public void chartMouseClicked(ChartMouseEvent e) { 
       if (e.getEntity() instanceof XYItemEntity) { 
        XYItemEntity item = (XYItemEntity) e.getEntity(); 
        System.out.println("You clicked at point of series:[" 
         + item.getSeriesIndex() + "] at location: [" 
         + item.getItem() + "] with UTL Text: " 
         + item.getURLText()); 
       } 
      } 

      public void chartMouseMoved(ChartMouseEvent e) { 
      } 
     }); 
     return chartPanel; 
    } 

    private void adjustAxis(NumberAxis axis, boolean vertical) { 
     axis.setRange(-3.0, 3.0); 
     axis.setTickUnit(new NumberTickUnit(0.5)); 
     axis.setVerticalTickLabels(vertical); 
    } 

    private XYDataset createSampleData() { 
     XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); 
     for (int i = 0; i < N * N; i++) { 
      //TODO HOW ADD URL text information here 
      series.add(rand.nextGaussian(), rand.nextGaussian()); 
     } 
     xySeriesCollection.addSeries(series); 
     return xySeriesCollection; 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       ScatterMouseClick demo = new ScatterMouseClick("Scatter Mouse click Demo"); 
       demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       demo.pack(); 
       demo.setLocationRelativeTo(null); 
       demo.setVisible(true); 
      } 
     }); 
    } 
} 

this is another post on how to display point information

+0

+1 [sscce] (http://sscce.org/). – trashgod

답변

1

사용하십시오 ChartMouseListenerhere을 그림과 같이. 필요에 따라 ChartEntity을 검사 할 수 있습니다. ChartFactory에서 URL 생성을 사용하도록 설정하면 getURLText()이 편리 할 수 ​​있습니다.

부록 :

JFreeChart jfreechart = ChartFactory.createScatterPlot(
    "Scatter Mouse click Demo", "X", "Y", createSampleData(), 
    PlotOrientation.VERTICAL, true, true, true); 

당신은 공장에 발전기를 추가하는 방법을 볼 수 있습니다에이 예제 URL을 생성하는 간단한 수정은 true에, 최종 매개 변수 urls을 설정하여 ChartFactory에이를 수 있도록하는 것입니다 렌더러 here. 대체 constructor parameters을 지정하거나 generateURL() 메소드를 대체하여 결과를 사용자 정의 할 수 있습니다.

콘솔 :

 
You clicked at point of series:[0] at location: [0] 
    with URL Text: index.html?series=0&item=0 
You clicked at point of series:[0] at location: [1] 
    with URL Text: index.html?series=0&item=1 
You clicked at point of series:[0] at location: [2] 
    with URL Text: index.html?series=0&item=2 

부록 : 편지 삭제 된 의견을 바탕으로, getURLText() 발전기가두고 것만 검색 있습니다. 또는 XYItemEntity은 부모 XYDataset에 대한 완전한 액세스 권한을 제공하지만 특정 데이터를 검색하려면 하위 클래스로 캐스팅해야 할 수도 있습니다.

+0

ChartEntity를 가져 오는 코드가 있지만 어떻게 GUID 폼을 추출합니까? – user648026

+0

'ChartEntity'는 여러분의'XYURLGenerator'가 남긴 엔티티의 URL 텍스트에 접근 할 수 있습니다. – trashgod

+0

나는이 데모가 비슷한 것을하고있는 것을 보았다. http://ww.nothingbutclouds.com/websvn/filedetails.php?repname=repo&path=/JFreeChartDemo/src/demo/ScatterPlotDemo3.java&peg=211 그러나 나는 아직도 어떻게하는지 알 수 없다. 코드 조각을 도울 수 있다면 도구 팁이나 URL 텍스트를 추출하십시오. - 위대한 답변이 될 것입니다. – user648026

관련 문제