java中的简单十字线

java中的简单十字线,java,swing,graphics,Java,Swing,Graphics,我必须画一个简单的十字线。我看到的只是一块空白的面板 class ChartPanel extends JPanel implements MouseMotionListener{ Graphics2D g; Dimension dimFrame; ChartPanel() { addMouseMotionListener(this); } public void mouseMoved(MouseEvent e) { dra

我必须画一个简单的十字线。我看到的只是一块空白的面板

class ChartPanel extends JPanel implements MouseMotionListener{
    Graphics2D g;
    Dimension dimFrame;
    ChartPanel() {
        addMouseMotionListener(this);
    }
    public void mouseMoved(MouseEvent e) {
        drawCrosshair(e.getX(),e.getY());
    }
    public void mouseDragged(MouseEvent e) {}
    protected void paintComponent(Graphics g2) {
        g = (Graphics2D)g2;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        dimFrame = getSize();
        setBackground(Color.WHITE);
    }
    public Dimension getPreferredSize() {
        return new Dimension(700, 500);
    }
    void drawCrosshair(double x, double y) {
        double maxx = dimFrame.getWidth();
        double maxy = dimFrame.getHeight();
        g.setPaint(Color.BLACK);
        g.draw(new Line2D.Double(0, y, maxx, y));
        g.draw(new Line2D.Double(x, 0, x, maxy));
    }
}
public class pra {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        ChartPanel chartPanel = new ChartPanel();
        jFrame.add(chartPanel);
        jFrame.pack();
        jFrame.setVisible(true);
        jFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

它将以正确的值进入drawCrosshair()方法。我不知道我做错了什么

您只需处理
drawCrosshair()
,然后在
paint
方法中绘制十字线,这将取代
paintComponent
方法(实际上我认为您不应该重写
paintComponent
):


这应该可以做到(事实上,我已经测试过了;)

小提示:与其覆盖
getPreferredSize
,不如使用所需的维度调用
setPreferredSize
。它工作了吗?@byxor:。另请参见。不要将图形上下文
g
保存为实例变量。如果这不是重复的问题,请编辑您的问题以包括一个显示您修改过的方法的问题。“Swing程序应该覆盖
paintComponent()
,而不是覆盖
paint()
”。另见。为我工作。但我不明白我的代码出了什么问题?
    Graphics2D g;
    Dimension dimFrame;
    int x, y;
    ChartPanel() {
        addMouseMotionListener(this);
        setPreferredSize(new Dimension(700, 500));
    }

    public void mouseMoved(MouseEvent e) {
        x = e.getX();
        y = e.getY();
        repaint();
    }

    public void mouseDragged(MouseEvent e) {
    }

    public void paint(Graphics g2) {
        super.paint(g2);
        g = (Graphics2D) g2;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        dimFrame = getSize();
        g.clearRect(0, 0, dimFrame.width, dimFrame.height);//clears previous drawings
        g.setColor(Color.BLACK);
        g.drawLine(x - 10, y, x + 10, y);
        g.drawLine(x, y - 10, x, y + 10);
    }