java.awt. Графика меняет цвет после рисования - PullRequest
0 голосов
/ 20 ноября 2011

Я задал подобный вопрос некоторое время назад здесь, но не получил ответа.Первоначальный вопрос был об изменении цвета фигуры после нажатия на нее.Но я озадачен тем, как вообще получить доступ к фигуре после ее отрисовки.

Это мой метод paintComponent

    @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);    

}

массив arcs [] содержит набор нарисованных Arc2Dна панели.Мой вопрос сейчас, если я хочу изменить цвет, например, дуги [0], как мне это сделать?

Спасибо!

РЕДАКТИРОВАТЬ: у меня теперь есть это событие MouseAdapter

     private class MyMouseAdapter extends MouseAdapter {
     public void mousePressed(MouseEvent e) {

         Point p = e.getPoint();
         Component c = getComponentAt(p);

         Graphics g = c.getGraphics();

         dimColors[1] = Color.RED;

         paintComponent(g);

     }
 }

И это работает, он меняет цвет дуги [1], потому что для arcs [1] в качестве цвета при рисовании установлен dimColors [1].

Однако я все еще могу 't выяснить, как проверить, была ли нажата правая дуга.Прямо сейчас вы просто нажимаете в любом месте графической панели, и она меняет цвет этой конкретной дуги

Ответы [ 2 ]

3 голосов
/ 23 февраля 2014

Это не отвечает на ваш предыдущий вопрос, но отвечает на ваш вопрос об обнаружении кликов. Для этого лучше всего использовать Graphics2D, потому что его написать гораздо проще, чем большинство других вариантов. Вот пример:

     public class GraphicsPanel extends JPanel implements MouseListener
    {   
            private Rectangle2D rect;

Сначала мы создадим прямоугольник Graphics2D.

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)(g);
            g2d.setColor(Color.GREEN);
            rect = new Rectangle2D.Double(70, 70, 100, 100);
            g2d.fill(rect);
            this.addMouseListener(this);
        }

А затем мы переопределяем метод paintComponent и создаем наш новый объект Rectangle2D.Double. Затем мы заполняем прямоугольник с помощью g2d.fill () и затем добавляем слушатель мыши в JPanel.

        public void mousePressed(MouseEvent e) 
            {

               if(rect.contains(e.getX(), e.getY()))
                    System.out.println("Rectangle clicked");
            }
    }

Наконец, нам нужно посмотреть, содержит ли этот прямоугольник точку, где пользователь щелкнул. Чтобы сделать это, просто посмотрите, содержит ли созданный нами прямоугольник местоположение щелчка пользователя с помощью метода содержимого (int x, int y) в Rectangle2D.double. Вот и все!

1 голос
/ 20 ноября 2011

если я хочу изменить цвет, например, дуги [0], как мне это сделать?

Линия (или что-то еще) существует только как группа пикселей, которые были окрашены в исходный цвет Чтобы изменить его цвет, вы должны изменить текущий цвет и нарисовать его снова.

...