【问题标题】:Drawing a rectangle in a JPanel, snapped to the nearest x pixels在 JPanel 中绘制一个矩形,捕捉到最近的 x 像素
【发布时间】:2015-09-01 01:53:13
【问题描述】:

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

举个例子,如果我单击并绘制一个从 (103, 105) 到 (203,205) 的矩形,该矩形应该看起来覆盖了从 (100,104) 到 (204,208) 的区域 - 即可能的最小矩形这样所有角的坐标都应该是 4 像素的倍数,并且实际点击的区域被完全覆盖。

我该怎么做呢?

【问题讨论】:

  • "(103, 105) 到 (203,205),矩形应该覆盖从 (100,104) 到 (204,208)"的区域" 据我了解,没有这些值与“4 像素”边框匹配。

标签: java swing user-interface scale


【解决方案1】:

好吧,我假设您有两个 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多