Re: [問題] JFreeChart 動態Table
※ 引述《rieo (星空下的月光)》之銘言:
: 打算用JFreeChart畫兩個表格
: 上方是個 TimeSeriesChart 下方是個 JXTable
: TimeSeriesChart用滑鼠框個區塊 他會自動Zoom In
: 假設原本資料有100組
: 框了其中20-50組資料 自動局部放大後
: 我打算下方的Table也只秀出這局部的Data (若Zoom Out後 又會回到全區的Data)
: 目前卡在框出區塊後 無法得知目前區塊 Time的值
: 有實做過 MouseListenr 但似乎僅能獲得當前 X Y 值
: 想請教是否有API 或是什麼方法可以做到類似功能
: 謝謝
網路上找到相關資料 但執行起來有點問題
private long getDomainValue(ChartPanel panel, MouseEvent e) {
int x = e.getX();
int y = e.getY();
Point2D point2D = panel.translateScreenToJava2D(new Point(x, y));
XYPlot xyplot = (XYPlot) panel.getChart().getPlot();
ChartRenderingInfo chartrenderinginfo = panel.getChartRenderingInfo();
java.awt.geom.Rectangle2D rectangle2d = chartrenderinginfo.getPlotInfo()
.getDataArea();
double d = xyplot.getDomainAxis()
.java2DToValue(point2d.getX(), rectangle2d,
xyplot.getDomainAxisEdge());
double d1 = xyplot.getRangeAxis()
.java2DToValue(point2d.getY(), rectangle2d,
xyplot.getRangeAxisEdge());
ValueAxis valueaxis = xyplot.getDomainAxis();
ValueAxis valueaxis1 = xyplot.getRangeAxis();
double d2 = valueaxis
.valueToJava2D(d, rectangle2d, xyplot.getDomainAxisEdge());
double d3 = valueaxis1
.valueToJava2D(d1, rectangle2d, xyplot.getRangeAxisEdge());
Point point = panel.translateJava2DToScreen
(new java.awt.geom.Point2D.Double(d2, d3));
System.out.println("Mouse coordinates are (" + x + ", " + y + "),
in data space = (" + d + ", " + d1 + ").");
System.out.println("--> (" + point.getX() + ", " + point.getY() + ")");
return new Double(d).longValue();
}
目前抓點基本上沒問題
但若是從滑鼠左上拉到右下 default行為會將所選區域放大
這時候點下去的X值正確 但放開時的X值會比實際值還小
不曉得是不是因為區域放大使得整個對應不正常 所造成的影響
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.15.66
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):