【问题标题】:MouseMotionListener showing (x,y) offsetMouseMotionListener 显示 (x,y) 偏移
【发布时间】:2015-10-15 05:48:03
【问题描述】:

首先,相关代码如下:

    canvas = new CanvasPanel();
    canvas.setBackground(Color.white);
    canvas.addMouseListener(new PointListener());
    canvas.addMouseMotionListener(new PointListener());

    JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, canvas);


class CanvasPanel extends JPanel
{
    public void paintComponent(Graphics page)
    {
        super.paintComponent(page);

        if (mouseDragged == true)
        {
            page.drawRect(x1, y1, x3, y3);
            canvas.repaint();
        }
    }
}


class PointListener implements MouseListener, MouseMotionListener
{
    public void mousePressed (MouseEvent event)
    {
        mouseDragged = true;
        x1 = event.getX();
        y1 = event.getY();
    }
    public void mouseReleased (MouseEvent event)
    {
       // some code
    }

    public void mouseDragged(MouseEvent event)
    {
        x3 = event.getX();
        y3 = event.getY();
        canvas.repaint();
    }

所以这段代码的作用是当我点击画布组件时,它会绘制一个矩形的轮廓,并且当我拖动鼠标时大小会发生变化

但是,当我单击并开始拖动鼠标时,矩形的右下角有一个偏移量。我拖动鼠标的那一刻,它似乎跳到了更大的尺寸。有趣的是,越靠近我点击的画布组件的左上角,矩形大小越接近我用鼠标绘制的矩形。

我该如何解决这个问题?

【问题讨论】:

    标签: java swing paintcomponent mouse-listeners


    【解决方案1】:

    请记住,drawRect 使用 xywidthheight 作为参数,您实际上应该使用点击点和拖动点之间的增量

    也许是……

    public void paintComponent(Graphics page)
    {
        super.paintComponent(page);
    
        if (mouseDragged == true)
        {
            int x = Math.min(x1, x3);
            int y = Math.min(y1, y3);
            int width = Math.max(x1, x3) - x;
            int height = Math.max(y1, y3) - y;
            page.drawRect(x, y, width, height);
        }
    }
    

    并且,不要在 paint 方法中调用 repaint

    【讨论】:

    • 哦,呵呵:/。谢谢你,我知道这很愚蠢
    • 答案可能并不明显,但drawRect 不接受负宽度/高度值;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多