Java 在JPanel中绘制矩形,捕捉到最接近的x像素

Java 在JPanel中绘制矩形,捕捉到最接近的x像素,java,swing,user-interface,scale,Java,Swing,User Interface,Scale,我有一个Swing UI,用户应该能够在JPanel中单击并拖动(在一些背景图像上),以便能够定义给定的区域。问题是屏幕上矩形的坐标和表示需要捕捉到绘制区域的外侧4个像素。背景图像将被放大,这样人们就无法在这些点之间设置边界,我希望UI能够反映这一点 举个例子,如果我要单击并绘制一个从(103105)到(203205)的矩形,则该矩形应该覆盖从(100104)到(204208)的区域-即,尽可能最小的矩形,使得所有角点的坐标应为4像素的倍数,并且实际单击的区域完全被覆盖 我该怎么做呢?好吧,我假

我有一个Swing UI,用户应该能够在JPanel中单击并拖动(在一些背景图像上),以便能够定义给定的区域。问题是屏幕上矩形的坐标和表示需要捕捉到绘制区域的外侧4个像素。背景图像将被放大,这样人们就无法在这些点之间设置边界,我希望UI能够反映这一点

举个例子,如果我要单击并绘制一个从(103105)到(203205)的矩形,则该矩形应该覆盖从(100104)到(204208)的区域-即,尽可能最小的矩形,使得所有角点的坐标应为4像素的倍数,并且实际单击的区域完全被覆盖


我该怎么做呢?

好吧,我假设您有两个
对象(开始、结束),因此您可以创建一个小方法来调整值

下面是一个简单的示例,可以帮助您开始:

import java.awt.*;
public class Main
{
    public static void main(String[] args) throws Exception
    {
        Point start = new Point(103, 105);
        Point end = new Point(203, 205);

        adjust(start, 4, true);
        adjust(end, 4, false);

        System.out.println(start);
        System.out.println(end);
    }

    public static void adjust(Point p, int snap, boolean snapLower)
    {
        int modX = p.x % snap;
        p.x = snapLower ? p.x - modX : p.x + snap - modX;

        int modY = p.y % snap;
        p.y = snapLower ? p.y - modY : p.y + snap - modY;
    }
}
“(103105)到(203205),矩形应该覆盖从(100104)到(204208)的区域。”据我所知,这些值都与“4像素”边框不匹配。