我在使用Graph绘图程序时遇到问题,该程序在ArrayList中存储元素(绘制的矩形和椭圆)。我想从列表中删除特定的矩形和椭圆,首先用鼠标左键选择元素,然后用鼠标右键删除它。然而,问题是我的程序将删除一个矩形或椭圆,而不是先用鼠标左键选择它(即我可以右键单击任何节点,它会在选中之前删除)。
我已将GraphElements的ArrayList声明为
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后没有在组件上绘制标签。我必须再次按下鼠标按钮才能显示文本。我猜是因为我的MousePressListener中有setLabel。但是我需要在添加文本之前选择元素,所以我不知道该怎么做。
以下是标签的ActionListener:
class addLabel implements ActionListener {
public void actionPerformed(ActionEvent e)
{
component.setLabel(labelField.getText());
}
}
addLabel label = new addLabel();
labelButton.addActionListener(label);
我感谢任何帮助。谢谢。
答案 0 :(得分:1)
这句话看起来非常可疑:
element.remove(i).isSelected(x, y);
似乎在说
“从列表中删除第i个元素,然后测试以查看
x, y
是否在其中”
您想要在删除之前测试是否选择了第i个元素。