在 JPanel 中绘制一个矩形,捕捉到最近的 x 像素
Drawing a rectangle in a JPanel, snapped to the nearest x pixels
我有一个 Swing UI,用户应该能够在 JPanel 中(在某些背景图像上)单击并拖动它来定义给定区域。问题是屏幕上矩形的坐标和表示需要捕捉到它们所绘制区域的外部 4 个像素。背景图像将被放大,这样就无法在这些点之间设置边界,我希望 UI 反映这一点。
举个例子,如果我要单击并绘制一个从 (103, 105) 到 (203,205) 的矩形,该矩形看起来应该覆盖从 (100,104) 到 (204,208) 的区域 - 即最小的可能的矩形,所有角的坐标都应为 4 像素的倍数,并且实际点击的区域被完全覆盖。
我该怎么做?
好吧,我假设你有两个 Point
对象(开始,结束),所以你可以创建一个小方法来调整值。
这是一个简单的入门示例:
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;
}
}
我有一个 Swing UI,用户应该能够在 JPanel 中(在某些背景图像上)单击并拖动它来定义给定区域。问题是屏幕上矩形的坐标和表示需要捕捉到它们所绘制区域的外部 4 个像素。背景图像将被放大,这样就无法在这些点之间设置边界,我希望 UI 反映这一点。
举个例子,如果我要单击并绘制一个从 (103, 105) 到 (203,205) 的矩形,该矩形看起来应该覆盖从 (100,104) 到 (204,208) 的区域 - 即最小的可能的矩形,所有角的坐标都应为 4 像素的倍数,并且实际点击的区域被完全覆盖。
我该怎么做?
好吧,我假设你有两个 Point
对象(开始,结束),所以你可以创建一个小方法来调整值。
这是一个简单的入门示例:
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;
}
}