【问题标题】:Java: Removing elements from an ArrayList and adding textJava:从 ArrayList 中删除元素并添加文本
【发布时间】:2012-02-27 04:05:28
【问题描述】:

我在使用将元素(绘制的矩形和椭圆)存储在 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);

感谢您的帮助。谢谢你。

【问题讨论】:

  • 您应该使用 Iterator.remove() 方法从 ArrayList 中删除项目。阅读collections
  • 或向后遍历 ArrayList。如果您通过向前迭代来绘制项目,这实际上是有意义的,因为您希望单击激活最顶部的项目。
  • @Max - 这不是 OP 的真正问题,而且由于集合是一个 ArrayList,因此在性能方面几乎没有什么区别。

标签: java graphics event-handling arraylist


【解决方案1】:

这句话看起来很可疑:

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

好像说

"从列表中删除第i个元素,然后测试x, y是否在其中"

您想在删除之前测试第 i 个元素是否被选中。

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 2013-02-24
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多