【问题标题】:Manipulate a single element of vector操作向量的单个元素
【发布时间】:2014-10-29 00:03:44
【问题描述】:

我目前正在尝试在 Java 中操作向量的单个元素。如果我尝试在循环中使用 elementAt(i) 或 get(i) 执行此操作,则整个向量仍然会更改。我正在寻找一种方法来尝试并在仍然使用向量的同时执行此操作(因为我在整个程序的其余部分都使用它们)。

我试图将我的向量克隆为一个临时向量,然后删除向量的所有元素,除了要操作的元素,但无济于事。

这是我的代码段:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D) g;
    for (int i = 0; i < shapes.size(); i++) {
        if (shapes.get(i) != null){
            g2.setColor(colorSelected());
            if(fill.isSelected() && !((String)shapesList.getSelectedItem() == "Line")){
                g2.fill(shapes.elementAt(i));
            } else {
                g2.draw(shapes.elementAt(i));
            }
        }
    }
}

正在发生的问题是我正在尝试填充/绘制/更改在我的临时绘制程序中绘制的单个下一个元素的颜色,但它会改变每个形状。

任何提示(或解释为什么会发生这种情况)将不胜感激。

【问题讨论】:

  • (String)shapesList.getSelectedItem() == "Line" 你应该使用equals 来比较字符串实例
  • 你应该改变所选项目的形状。
  • 欣赏它@Robin。我在深夜这样做了,从来没有注意到我的错误。
  • 我的猜测是@Robin 已经解决了这个问题,但是由于您的描述,“它改变了每个形状”和“整个向量都改变了”非常模糊,我无法说出究竟是什么问题是。
  • 嘿@ajb,Robin 告诉我要修复的内容与实际更改屏幕上的每个形状无关,只是修复了我的 if 语句。所以发生的事情是,当我在我的用户界面上选中填充或取消选中它时,下一次我在屏幕上绘制一个形状时,每个形状(而不仅仅是我绘制的那个)都将被操作为填充或勾勒出来,而不是我画的单一形状。

标签: java vector


【解决方案1】:

这个问题最可能的原因是shapes实际上并不包含多个形状,而只是对同一个Shape对象的多个引用。然后,该错误将出现在填充 Vector 的代码部分中。

旁注:Vector 类已经过时了。应该避免使用ArrayList,除非您使用的API 确实需要Vector(这确实发生在Swing 中)。如果您正在使用教您使用Vector 的教程或书籍,那么它们可能已有 10 多年的历史,应该避免使用。

【讨论】:

  • 我明白了。我不知道。感谢您的信息。如果可以的话,我将开始更改我的程序以使用 ArrayList。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多