2015-04-21 3 views
-1

Я пытаюсь создать редактор карт, который поддерживает прямоугольники под разными углами (поэтому он рисует прямоугольники с использованием полигонов). Я хочу поймать многоугольник по их местоположению на кадре без использования математических вычислений.Ловля многоугольников на JPanel

Есть ли команда, поддерживающая такую ​​вещь?

Я попытался поймать многоугольники их визуальных представлений:

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

, но он не работает.

(Если я просто рисования прямоугольников я хотел бы использовать JPanel и использовать SetBounds команду, чтобы нарисовать прямоугольник, но я не думаю, что я могу сделать форму многоугольника JPanels)

ответ

2

Сначала необходимо создать список, содержащий все многоугольники, которые вы хотите рисовать:

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 
    } 

} 

Если я просто рисование прямоугольников я хотел бы использовать JPanel и использовать SetBounds команду, чтобы нарисовать прямоугольник, но я не думаю, что я могу сделать форму многоугольника JPanels

В качестве альтернативного подхода, который делает использование проверки компонентов из Playing With Shapes. Классы позволяют создавать ShapeComponent с помощью любой формы.

+0

Спасибо, сэр, я теперь больше о том, как работают фигуры, и, надеюсь, я получу свой код, работающий с вашей помощью :) – Eren

1

Вы бы не использовать отдельные JPanels сделать каждый Polygon. Вы бы использовали один класс, который расширяет JPanel, а затем переопределяет метод paintComponent() для рисования полигонов. Больше информации here.

Как только вы нарисовали свои полигоны в JPanel, вы можете использовать метод Polygon.contains(), чтобы проверить, находится ли мышь внутри JPanel. Больше информации об этом в the API.

+0

Благодарим вас за ответ, сэр, хотя ответ Камикри кажется «правильным способом» делать то, что я хочу сделать, так, как вы предложили, будет намного проще реализовать, поэтому я пойду с этим :) – Eren

+0

@ Эрен Камикр и я предлагаем одно и то же решение. –

+0

Oooh so Polygons.contains метод такой же, как метод Shape.contains, я вижу, спасибо. I tought Polygons.contains метод был конкретным кодом для Polygon api BTW есть заметное различие между компонентом краски и краской, потому что im использование краски – Eren

Смежные вопросы