2015-11-19 2 views
0

Я написал этот код, который отображает фигуру при щелчке мышью, но у меня проблема. Когда я нажимаю на новое место, форма исчезает на предыдущем. Как я могу остановить это?Как остановить фигуру от исчезновения при нажатии на новое место?

Первый класс:

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 

public class MouseClick { 
    private static int x,y; 
    private static DrawingObjects object = new DrawingObjects(); 

    public static void main(String[] args){ 

     JFrame frame = new JFrame("MouseClick"); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 400); 
     frame.add(object); 
     object.addMouseListener(new AL()); 
    } 
    static class AL extends MouseAdapter{ 
     public void mouseClicked (MouseEvent e){ 
      x = e.getX(); 
      y = e.getY(); 
      object.drawing(x, y); 
     } 
    } 
} 

Второй класс:

import javax.swing.*; 
import java.awt.*; 

public class DrawingObjects extends JPanel{ 
    private static int x,y; 

    public void drawing(int xx, int yy){ 
     x = xx; 
     y = yy; 
     repaint(); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.fillRect(x, y, 20, 20); 
    } 
} 
+1

Вы сохраняете только последний клик расположение в 'DrawingObjects 'класс. Таким образом, предыдущие прямоугольники, которые вы нарисовали ранее, исчезнут. – Blip

+0

@Blip Итак, я должен использовать arraylist? – ItssMohammed

+0

Да, вы должны использовать Список для хранения предыдущих кликов. – Blip

ответ

1

Лучший способ справиться с этим, чтобы следить за каждую точку, которая была щелкнула, и перерисовать каждый из них в paintComponent.

Меняем private static int x, y к private List<Point> points = new ArrayList<>() и добавьте в том, что вместо того, чтобы:

public void drawing(int x, int y){ 
    points.add(new Point(x, y)); 
    repaint(); 
} 

Затем пройти через каждую точку, когда вы перерисовки:

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    for(Point p : points){ 
     g.fillRect(p.x, p.y, 20, 20); 
    } 
} 
+0

Нужно ли мне что-то менять в первом классе? – ItssMohammed

+0

@ItssMohammed Я не думаю, что вам нужно, хотя я еще не тестировал это. – resueman

+0

@ ItssMohammed Хорошо, я протестировал, и вам не нужно ничего менять в первом классе. Единственные вещи, которые нужно изменить, о которых я не упоминал, - это импорт. Оба 'List' и' ArrayList' находятся в пакете 'java.util'. – resueman