如何仅当用户将鼠标悬停在 x0y 轴上时动态标记点? [重复]

问题描述 投票:0回答:0

我想在用户屏幕位于这些点上时动态绘制 x 和 y 轴上的点,而不是在程序运行时生成它们,如下面的代码所示。 我不知道如何在不存储非常大的数字的情况下计算应该在轴上添加哪些点。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Graph extends JPanel {

    private Point dragStart;
    private double scale=1.00;
    private Point origin=new Point(0,0);

    public Graph() {
        setBorder(BorderFactory.createLineBorder(Color.BLACK));
        setBackground(Color.BLACK);
        setBounds(500,500,500,500);
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                dragStart = new Point(e.getX(), e.getY());
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
                int dx = e.getX() - dragStart.x;
                int dy = e.getY() - dragStart.y;
                origin.setLocation(origin.x + dx, origin.y + dy);
                dragStart = e.getPoint();
                repaint();
            }
        });
    }
    @Override
    public void repaint(){
        super.repaint();
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setPaint(Color.white);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        int width=getWidth();
        int height=getHeight();
        g2.drawLine(0, origin.y+height/2, width,origin.y+height/2);
        g2.drawLine(origin.x+width/2,0, origin.x+width/2, height);
        for (int i = -1000; i <= 1000; i++)//here i want to have more than [-1000,1000] range
        {
            int x = origin.x + width / 2 + i * 50;
            g2.drawLine(x, origin.y + height / 2 - 5, x, origin.y + height / 2 + 5);
            g2.drawString(Integer.toString(i), x - 4, origin.y + height / 2 + 20);
            int y = origin.y + height / 2 - i * 50;
            g2.drawLine(origin.x + width / 2 - 5, y, origin.x + width / 2 + 5, y);
            g2.drawString(Integer.toString(i), origin.x + width / 2 + 10, y + 4);
        }
    }
public static void main(String args[]){
    JFrame f=new JFrame();
    f.setDefaultCloseOperation(3);
    f.setBounds(500,500,500,500);
    f.getContentPane().add(new Graph());
    f.setVisible(true);
}
}

我试图在 for 语句中为 i 变量提供更广泛的范围,但这样做只会减慢我的程序速度

java swing jframe
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.