これを元の投稿から更新しました。アイテムを追加/削除できるようになりましたが、最後に残ったアイテムがスタックします...ボタンの状態に関係しているようです...最後のアイテムの「del」ボタンはグレー表示されます...また、「新しいアイテムを追加」ボタンをクリックすると、これに影響することがあるようです。また、私のおそらく粗雑なコードをどのように改善できるかについて、他に何か観察があれば....
package com.jlab.inventory;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Item extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
JTextField volume = new JTextField("#vol");
JButton deleteItem = new JButton("-del");
Inventory inventory;
public Item(Inventory inv) {
deleteItem.addActionListener(this);
this.setBackground(Color.gray);
this.setPreferredSize(new Dimension(400, 50));
this.add(volume);
this.add(deleteItem);
inventory = inv;
}
public void actionPerformed(ActionEvent e) {
System.out.println("item action");
inventory.removeItem(this);
}
}
package com.jlab.inventory;
import java.awt.Color;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.awt.event.*;
public class Inventory implements ActionListener {
JTextField volumeTotal = new JTextField("Volume Total Value"); // count total item Volume
JFrame window = new JFrame(); // new items to be added during run
JButton newItemButton = new JButton("Add new item");
public ArrayList<Item> itemList = new ArrayList<Item>(); // not static
public static void main(String args[]) {
Inventory store = new Inventory();
store.runStore();
}
public Inventory() { // constructor initializes program's main interface and data
newItemButton.addActionListener(this);
window.setPreferredSize(new Dimension(460, 700));
window.setLayout(new FlowLayout());
window.add(volumeTotal);
window.add(newItemButton);
window.pack();
window.setVisible(true);
}
public void runStore() {
System.out.println("revalidating");
window.revalidate();
}
public void actionPerformed(ActionEvent e) {
System.out.println("adding new item");
itemList.add(new Item(this));
System.out.println(itemList.size());
window.add(itemList.get(itemList.size()-1));
runStore();
}
public void removeItem(Item item) { // -removes Item passed in: from ArrayList + GUI
itemList.remove(item);
window.remove(item);
runStore();
}
//addItem(Item i) {
// add item to arraylist
// add item to gui
//}
}