Как удалить объект щелчком мыши? - PullRequest
0 голосов
/ 24 марта 2010

Я сделал простой редактор FlowChat, который создает прямоугольники и треугольники, соединяет их друг с другом и показывает путь сверху вниз. Я тоже могу перемещать эти элементы на экране.

Я сейчас пытаюсь создать кнопку, чтобы удалить элемент, на который я нажал. Существует проблема, что я могу удалить MyTriangle объекты, но я не могу удалить MyRectangle объекты. Он удаляет, но не объект, который я нажал. Я удаляю от первого объекта до последнего.

Вот мой код:

 if (deleteObj) {

        if (rectsList.size() != 0) {
            for (int i = 0; i < rectsList.size(); i++) {
                MyRect rect = (MyRect) rectsList.get(i);
                if (e.getX() <= rect.c.x + 50 && e.getX() >= rect.c.x - 50
 && e.getY() <= rect.c.y + 15 && e.getY() >= rect.c.y - 15) {
                    rectsList.remove(rect);
                    System.out.println("This is REctangle DELETED\n");

                }

            }
        }
        if (triangleList.size() != 0) {
            for (int j = 0; j < triangleList.size(); j++) {
                MyTriangle trian = (MyTriangle) triangleList.get(j);

                if (e.getX() <= trian.c.x + 20 && e.getX() >= trian.c.x - 20 
&& e.getY() <= trian.c.y + 20 && e.getY() >= trian.c.y - 20) {
                    triangleList.remove(trian);
                    System.out.println("This is Triangle  Deleted\n");

                }

            }
        }

Редактировать Здесь классы MyRectangle и MyTriangle

public class MyRect extends Ellipse2D.Double {

Point c;
Point in;
Point out;
int posX;
int posY;
int width = 100;
int height = 30;
  int count;


public MyRect(Point center, Point input, Point output,int counter) {

    c = center;
    in = input;
    out = output;
    count=counter;

}

void drawMe(Graphics g) {
    //    in.x=c.x+20;
    int posX = c.x;
    int posY = c.y;
    int posInX = in.x;
    int posInY = in.y;
    int posOutX = out.x;
    int posOutY = out.y;




    g.setColor(Color.MAGENTA);
    g.drawString(" S "+count ,posX-5, posY+5);


    g.setColor(Color.black);
    g.drawRect(posX-50, posY-15, width, height);
    g.setColor(Color.green);
    g.drawRect(posInX-3, posInY-9, 6, 6);
    g.setColor(Color.blue);
    g.drawRect(posOutX-3, posOutY+3, 6, 6);


}
}

public class MyTriangle {

Point c;
Point in ;
Point outYES ;
Point outNO ;
int posX;
int posY;
int count;

public MyTriangle(Point center,Point input,Point outputYES,Point outputNO,int counter)     {

    c = center;
    in = input;
    outYES = outputYES;
    outNO = outputNO;
    count=counter;
}

void drawMe(Graphics g) {

    int posX = c.x;
    int posY = c.y;
    int posInX=in.x;
    int posInY=in.y;
    int posOutYESX=outYES.x;
    int posOutYESY=outYES.y;
    int posOutNOX=outNO.x;
    int posOutNOY=outNO.y;

    int[] xPoints = {posX - 50, posX, posX + 50, posX};
    int[] yPoints = {posY, posY - 30, posY, posY + 30};

     g.setColor(Color.MAGENTA);
    g.drawString(" T "+count,posX-5, posY+5);
    g.setColor(Color.black);
    g.drawPolygon(xPoints, yPoints, 4);
   // draw input
    g.setColor(Color.green);
    g.drawRect(posInX-3,posInY-9, 6, 6);
    g.setColor(Color.blue);
    g.drawRect(posOutYESX-9,posOutYESY-3 , 6, 6);
    g.setColor(Color.red);
    g.drawRect(posOutNOX-3,posOutNOY+3 , 6, 6);
}
}

Редактировать 2

Здесь мои функции для добавления объекта в список. Может ли это быть ошибкой муравья? Потому что я являюсь ее новым объектом этого калибра, и я добавляю этот объект в список прямоугольников или треугольник ..

    public void initRect(Point c, Point in, Point out) {
    sCounter++;
    MyRect myrects = new MyRect(c, in, out, sCounter);

    rectsList.add(myrects);
    s_And_t_List.add(myrects);

    objectCounter.add("S " + sCounter);

    selectablePanel.repaint();
}

public void initTriangle(Point c, Point in, Point outYES, Point outNO) {
    tCounter++;
    MyTriangle mytriangles = new MyTriangle(c, in, outYES, outNO, tCounter);

    triangleList.add(mytriangles);
    s_And_t_List.add(mytriangles);
    objectCounter.add("T " + tCounter);
    selectablePanel.repaint();
}

1 Ответ

0 голосов
/ 24 марта 2010

Кажется, ваша логика неверна. В вашем классе Rectangle почему бы не создать метод, возвращающий логическое значение, которое проверяет, содержится ли заданный набор координат в вашем объекте. Например:

public boolean contains(int x, int y){  
    if(x_starting_point <= x && x <= x_starting_point+width
    && y_starting_point <= y && y <= y_starting_point+height)
        return true; 

    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...