2013-12-08 37 views
0

我正在尝试更改数组列表中项目的值。我似乎无法得到这个工作。我对如何真正地问这个问题感到不知所措。代码是相当广泛的(或者至少在我的书中),所以我不能真正展现全部。但是,如果我知道当前的索引,我该如何更改ItemName?在数组列表编码问题中修改项目

currentIndex.setItemName(newItemName); 

CurrentIndex是一个int,告诉我我在哪个索引处,ItemName是一个位于我的数组列表中的字符串。我应该在试图设置它之前获取ItemName吗?像这样的东西

InventoryItem.getItemName(); 
currentIndex.setItemName(newItemName); 

这也行不通。

编辑:我被要求显示更多的代码。下面是我的动作监听

modifyButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JTextField xField = new JTextField(15); 
      JTextField yField = new JTextField(15); 
      JTextField zField = new JTextField(15); 

      JPanel myPanel = new JPanel(); 
      myPanel.add(new JLabel("Item Name:")); 
      myPanel.add(xField); 

      myPanel.add(Box.createVerticalStrut(15)); // a spacer 
      myPanel.add(new JLabel("Number in inventory:")); 
      myPanel.add(yField); 

      myPanel.add(Box.createVerticalStrut(15)); // a spacer 
      myPanel.add(new JLabel("Unit Price:")); 
      myPanel.add(zField); 
      int result = JOptionPane.showConfirmDialog(null, myPanel, 
        "Please Enter data into all boxes", JOptionPane.OK_CANCEL_OPTION); 
      if (result == JOptionPane.OK_OPTION) { 

       String newItemName = String.valueOf(xField); 
       String text1 = yField.getText(); 
       String newInventoryAmount = String.valueOf(text1); 
       int newAmount = Integer.parseInt(newInventoryAmount); 
       String text2 = zField.getText(); 
       String newUnitPrice = String.valueOf(text2); 
       double newPrice = Double.parseDouble(newUnitPrice); 
       inventory.get(currentIndex).setItemName(newItemName); 
       inventory.get(currentIndex).setInStock(newAmount); 
       inventory.get(currentIndex).setUnitPrice(newPrice); 


      } 
     } 

} 

); 
+0

'ArrayList'的名字是什么? – nhgrif

+0

我也试过类似'inventory.set(itemName = newItemName);'但似乎无法找到itemName。我认为那是因为它是在一个单独的课堂上? – kerinr

+0

'公共静态ArrayList 库存=新ArrayList <>();' – kerinr

回答

1

ìnt弹出没有一个方法setItemName(或任何方法可言,因为它是一个原始的,而不是一个对象)面板。

尝试yourArrayList.get(currentIndex).setItemName(newItemName);

它调用setItemName列表中所需的元素。

编辑:解决您的新的问题,与

String newItemName = xField.getText(); 

更换String newItemName = String.valueOf(xField);我相信这是你想要做什么。

+0

这工作,但当我去看看新的价值它说物品名称= javax.awing.JTextField(...似乎并不 – kerinr

+0

@kerinr,让我们看看更多的代码 – kviiri

+0

@kerinr,看看我的答案中的编辑 – kviiri

1
+0

'set'改变了对象的引用,这对改变对象没有好处在列表中没有更换它 – kviiri

+0

但他说这个字符串在他的数组列表中,并且他试图改变它。字符串是不可变的,所以唯一的方法是将它设置在列表中。 –

+0

字符串不可变不意味着您不能替换对象中的字符串引用。 – kviiri

2

我不知道你的ArrayList是什么名字,所以我只会把它的ArrayList。

尝试

arrayList.get(currentIndex).setItemName(newItemName); 

arrayList.get(currentIndex)调用从列表的当前索引

这允许您使用.setItemName(newItemName)改变对象的名称处的元素。

+1

这似乎令人困惑。也许只是把它叫做arrayList。 – bcorso

+0

是的,至少给它一个理论上是正确的名称。 – kviiri

0

看看这个代码,完成我认为你正在尝试做的事情。

public class Test { 

    public static void main(String args[]){ 

     ArrayList<Employee> myArrayList = new ArrayList<Employee>(); 

     Employee e1 = new Employee(); 
     e1.setName("Juan"); 

     myArrayList.add(e1); 

     myArrayList.get(0).setName("Jhon"); 

     System.out.println(myArrayList.get(0).getName()); 


    } 

} 

class Employee { 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 



}