Java: удаление элементов из ArrayList и добавление текста - PullRequest
1 голос
/ 27 февраля 2012

У меня проблемы с программой для рисования Графика, которая хранит элементы (нарисованные прямоугольники и эллипсы) в ArrayList. Я хотел бы удалить определенные прямоугольники и эллипсы из списка, сначала выбрав элемент левой кнопкой мыши, а затем удалив его правой кнопкой мыши. Однако проблема заключается в том, что моя программа удалит прямоугольник или эллипс без того, чтобы он был выбран левой кнопкой мыши в первую очередь (т.е. я могу щелкнуть правой кнопкой мыши по любому узлу, и он будет удален, прежде чем он будет выбран).

Я объявил ArrayList для GraphElements как

ArrayList <GraphElement> element = new ArrayList<GraphElement>();

Внутри MousePressListener часть, с которой у меня возникают сложности, (часть кода setLabel связана с моим следующим вопросом):

for (int i = 0; i < element.size(); i++)
  {
  GraphElement el =  (GraphElement)element.get(i);
        el.isSelected(x, y); // isSelected method (functioning correctly) to check whether the coordinates are inside the bounds of the rectangle or ellipse
        if (el.isSelected(x,y))
        {                   
          if (event.getButton() == MouseEvent.BUTTON3) // delete a node
             element.remove(i).isSelected(x, y);
          if (setLabel)
         {
           el.setLabel(label);
           setLabel = false;
           repaint();
         }  
         }
}  

Во-вторых, я хотел бы добавить метку к выбранному прямоугольнику или эллипсу. Это делается в моей программе путем выбора прямоугольника или эллипса для добавления текста, ввода текста в JTextField и затем выбора JButton для применения изменений. Однако моя проблема заключается в том, что метка не отображается на компоненте после нажатия кнопки JButton. Я должен снова нажать кнопку мыши, чтобы отобразился текст. Я думаю, это потому, что у меня есть setLabel в моем MousePressListener. Но мне нужно выбрать элемент перед добавлением текста, поэтому я не знаю, как это сделать.

Вот ActionListener для меток:

  class addLabel implements ActionListener {
    public void actionPerformed(ActionEvent e) 
    {
        component.setLabel(labelField.getText());
    }
  }
  addLabel label = new addLabel();
  labelButton.addActionListener(label);

Я ценю любую помощь. Спасибо.

1 Ответ

1 голос
/ 27 февраля 2012

Это утверждение выглядит весьма подозрительно:

element.remove(i).isSelected(x, y);

Кажется, говорят

"удалить i-й элемент из списка, И ТОГДА проверить, есть ли в нем x, y"

Вы хотите проверить, выбран ли i-й элемент ДО того, как вы удалите его.

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