在 JPanel 上捕获多边形

Catching Polygons on JPanel

我正在尝试制作一个支持不同角度的矩形的地图编辑器(因此它使用多边形绘制矩形)。我想在不使用数学计算的情况下通过它们在框架上的位置来捕捉多边形。

有没有命令支持这样的东西?

我试图通过视觉表现来捕捉多边形:

public void mousePressed(MouseEvent e){
 Component component = getComponentAt(e.getX(), e.getY());
  if(component instanceof wall){

但是没用。

(如果我只是简单地绘制矩形,我会使用 JPanel 并使用 setbounds 命令绘制矩形,但我不认为我可以制作多边形 JPanel)

您不会使用单独的 JPanel 来绘制每个多边形。您将使用扩展 JPanel 的单个 class,然后覆盖 paintComponent() 方法来绘制多边形。更多信息 here.

将多边形绘制到 JPanel 后,您可以使用 Polygon.contains() 方法来测试鼠标是否在 JPanel 中。 the API.

中的更多信息

您首先需要创建一个包含您要绘制的所有多边形的列表:

Shape circle = new Ellipse2D.Double(0, 0, 30, 30);
List<Shape> shapes = new ArrayList<Shape>();
shapes.add( circle );

然后在 paintComponent() 方法中遍历列表中的所有形状:

Graphics2D g2d = (Graphics2D)g.create();

for (Shape shape : shapes)
{
    g2d.draw( shape );
}

g2d.dispose();

然后在 MouseListener 中遍历列表以查看单击了哪个形状:

public void mousePressed(MouseEvent e)
{
    for (Shape shape : shapes)
    {
        if (shape.contains(e.getPoint())
            // do something
    }

}

If i was simply drawing rectangles i would use JPanel and use setbounds command to draw a rectangle, but i dont think i can make polygon-shaped JPanels

对于确实使用组件的替代方法,请查看 Playing With Shapes。 类 允许您使用任何形状创建 ShapeComponent