У меня проблемы с программой для рисования Графика, которая хранит элементы (нарисованные прямоугольники и эллипсы) в 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);
Я ценю любую помощь. Спасибо.