我有一张图表,其中x轴显示时间,y轴显示我的数据。 我想通过为x轴选择不同的指标来更改比例。例如秒,分钟和小时刻度。默认值为秒。因此,如果我选择分钟,图表应该更小并且更加弯曲。任何的想法? UI没有完成,但是您认为会有x和y轴。参数度确定它应该缩放到秒(度= 1), 分钟(度= 60)或小时(度= 3600)
private void drawLines(Graphics g, ArrayList<Point> points,int degree) throws Exception {
if (points == null || points.isEmpty()) {
throw new Exception("No points found!!!");
}
for (int i = 0; i < points.size() - 1; i++) {
Point firstPoint = points.get(i);
Point secondPoint = points.get(i + 1);
g.drawLine((int) firstPoint.getX(), (int) firstPoint.getY(), (int) secondPoint.getX(),
(int) secondPoint.getY());
}
}
答案 0 :(得分:2)
考虑使用jfreechart,它会缩放图形以填充封闭容器。在看到here的示例中,封闭容器是ChartPanel
,已添加到框架的默认CENTER
的{{1}}。这将允许图形在调整封闭框架大小时增大和缩小。
一般方案使用linear interpolation映射模型和视图坐标。给定以下比例,您可以交叉乘法并求解缺失的坐标,如将鼠标坐标映射到图像中的像素坐标的完整example所示。
BorderLayout
我不想使用
view.x : panelWidthInPixels :: model.x : modelXRange view.y : panelHeightInPixels :: model.y : modelYRange
。还有其他办法吗?
是的,作为@MadProgrammer comments,你可以
使用上面显示的比例将数据缩放到封闭容器中。引用的example隔离了基本方法; JFreeChart
是一个功能齐全的示例。
使用JFreeChart
将渲染图像缩放到封闭容器中。这个example's BufferedImage
会吸引ComponentHandler
,其大小可以填充封闭的BufferedImage
。 JPanel
图像在background
的实现中呈现。调整框架大小以查看效果。