2

ここに画像の説明を入力

これを元の投稿から更新しました。アイテムを追加/削除できるようになりましたが、最後に残ったアイテムがスタックします...ボタンの状態に関係しているようです...最後のアイテムの「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
    //}
}
4

1 に答える 1

0

表示されているコンテナの内容を変更する場合は、検証して再描画する必要があります。だから私はあなたのremoveItem()方法を以下のように修正しました、そしてそれは今動作します。

public void removeItem(Item item) { // -removes Item passed in: from ArrayList + GUI
    itemList.remove(item);
    window.remove(item);
    window.validate();
    window.repaint();
    runStore();
}
于 2012-09-04T08:32:59.900 に答える