Сравнение Arc2D с компонентом - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть быстрый вопрос к вам, ребята, ну, быстрый для вас, не быстрый для меня.

У меня есть массив, который заполнен формами Arc2D, и у меня есть MouseAdapter

В событии mousePressed мне нужно сравнить Arc2D, на который нажали, с массивом Arc2D или, что еще лучше, автоматически определить, на каком клике был Arc2D, и затем иметь возможность работать с ним (изменить цвет, более конкретно)

Я попробовал это

private class MyMouseAdapter extends MouseAdapter {
     public void mousePressed(MouseEvent e) {
         Point p = e.getPoint();
         Component c = gamePanel.getComponentAt(p);

         if(c == arcs[0]) {
             System.out.println("test");
         }
     }
}

, конечно, это не работает, но я, честно говоря, понятия не имею, что делать

большое спасибо заранее!

РЕДАКТИРОВАТЬ:

Посмотрев на первый ответ, который я получил здесь, я попытался изменить код на этот

private class MyMouseAdapter extends MouseAdapter {
     public void mousePressed(MouseEvent e) {
         Point p = e.getPoint();

         if(arcs[0].contains(p)) {
             System.out.println("test");
         }
     }
}

Конечно, это не сработает, потому что массив arcs содержит только дуги, которыепозже нарисованы в этом методе

@Override
protected void paintComponent(Graphics graph) {
    super.paintComponent(graph);
    Graphics2D g = (Graphics2D) graph;
    // smooth graphics
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    // moving to the middle of the panel
    g.translate(this.getWidth()/2, this.getHeight()/2);

    // painting colored arcs
    for(int i = 0; i < 4; i++) {
        g.setColor(dimColors[i]);
        g.fill(arcs[i]);            
    }

    // painting borders
    g.setColor(Color.BLACK);
    g.setStroke(new BasicStroke(5F));
    g.drawLine(-98, 0, 98, 0);
    g.drawLine(0, -98, 0, 98);      
    g.draw(circle);     

    // painting central white circle
    g.setColor(Color.WHITE);
    g.fill(smallCircle);        
    g.setColor(Color.BLACK);
    g.draw(smallCircle);    

}

Я полностью застрял, ребята

1 Ответ

0 голосов
/ 20 ноября 2011

Вот с этого и можно начать ...

private class MyMouseAdapter extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
        Point click = e.getPoint();
        //this next loop may seem hacky
        for (Arc2D c: arcs) {
            if (c.getX() == click.getX() && c.getY() == click.getY()) {
                System.out.println("The arc at (" + c.getX() + ", " + c.getY() + ") was clicked.");
                return;
            }
        }
        System.out.println("No arcs were clicked.");
    }
}
...