java - 图形和缩放功能

标签 java swing graph zooming

我想在我的图表中添加缩放功能。 例如,如果我的图表的 maxY 是 5000,并且我围绕中心缩放 200 米的距离,那么我的轴应表示从 2400 到 2600 的值,中心为 2500。

private class ZoomHandler implements MouseWheelListener {

    public void mouseWheelMoved(MouseWheelEvent e) {
        double distanceY = maxY;

        double cursorY = maxY / 2.0;

        int rotation = e.getWheelRotation();
        if (rotation < 0) {
            distanceY = 200 / 2;
        } else {
            distanceY = 200 * 2;
        }
        maxY = cursorY + distanceY;

        repaint();
    }
}

有人可以帮忙数学运算吗? 谢谢。

图表是这样绘制的:

private void drawAxis(Graphics2D g2) {
    FontMetrics metrics = g2.getFontMetrics();
    double axisH = yPositionToPixel(originY);
    double axisV = xPositionToPixel(originX);

    g2.drawLine(0 + V_BORDER, (int) axisH, getWidth(), (int) axisH);

    g2.drawLine((int) axisV, (int) axisH, (int) axisV, getHeight() - H_BORDER);
}

protected double yPositionToPixel(double position) {
    double height = (double) getHeight();

    return pixelOriginY + (position) / (maxY) * (height - (pixelOriginY + H_BORDER));
}

protected double xPositionToPixel(double position) {
    double width = getWidth();
        return (width) - pixelOriginX - (position - minX) / (maxX - minX) * (width - (pixelOriginX + V_BORDER));
}

private void drawHorizontalLabels(Graphics2D g2) {
    double axisV = xPositionToPixel(originX);
    FontMetrics metrics = g2.getFontMetrics();
    for (double y = originY + majorY; y < maxY + majorY; y += majorY) {
        int position = (int) yPositionToPixel(y);
        if (rightToLeft) {
            g2.drawString(formatter.format(y), (int) axisV + 5, position);
    }}

构造函数如下所示:

public Graph(double originX, double originY, double pixelOriginX, double pixelOriginY,
        double minX, double maxX,
        double minY, double maxY,
        double majorX, double majorY, String labelXaxis, String labelYaxis) {}

这就是我初始化它的方式:

new GraphDisplay(0.0, 0.0, 40, 100, -0.1, 120, -0.1, 5000, 20, 1000);

GraphDisplay 扩展了 Graph。

最佳答案

JFreeChart已经内置了。

关于java - 图形和缩放功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5579268/

相关文章:

java - GraphStream 在图中绘制分组节点

java - 如何使用java swing在 Crystal 报表中运行时切换数据库连接

java - 过滤 getAll 查询结果

java - 如何用 Direct Spark Cassandra 表数据操作替换 JAVA 循环

java - 从行数未知的文本创建图像

java - 无法引用 Action 监听器 (Jframe) 内的非变量

java - 第二个 while 循环无限运行有人可以解释为什么吗?

java - 如何找到 Swing 组件抛出的未知异常的(信息性)堆栈跟踪

Python:如何使用 Plotly 堆叠或叠加直方图

algorithm - 图论教程