下面是創建具有代碼編號名稱,價格和數量的項目的代碼。使用hashmap在JTextField中顯示數據並更新它
public class StockData {
private static class Item {
Item(String n, double p, int q) {
name = n;
price = p;
quantity = q;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getQuantity() {
return quantity;
}
private final String name;
private final double price;
private int quantity;
}
public final static Map<String, Item> stock = new HashMap();
static {
stock.put("00", new Item("Bath towel", 5.50, 10));
stock.put("11", new Item("Plebney light", 20.00, 5));
stock.put("22", new Item("Gorilla suit", 30.00, 7));
stock.put("33", new Item("Whizz games console", 50.00, 8));
stock.put("44", new Item("Oven", 200.00, 4));
}
public static Map<String, Item> getStock() {
return stock;
}
public static String getName(String key) {
Item item = stock.get(key);
if (item == null) {
return null; // null means no such item
} else {
return item.getName();
}
}
public static double getPrice(String key) {
Item item = stock.get(key);
if (item == null) {
return -1.0; // negative price means no such item
} else {
return item.getPrice();
}
}
public static int getQuantity(String key) {
Item item = stock.get(key);
if (item == null) {
return -1; // negative quantity means no such item
} else {
return item.getQuantity();
}
}
public static void update(String key, int extra) {
Item item = stock.get(key);
if (item != null) {
item.quantity += extra;
}
}
}
這裏是一個不同的類,它是我的GUI的一部分,它看起來像:http://imgur.com/Jhc4CAz
和我的想法是你鍵入的項目如的代碼。 22然後輸入您想要添加到股票的數量,例如5點擊添加,這樣它會添加到變量中,但會立即更新框中的文本,就像您在屏幕上看到的那樣。
我真的對hashmap/list感到困惑我不認爲有一點將hashmap中的所有數據複製到列表中,並且將其乘以相當多,必須有更好的方法來實現這一點。
public class UpdateStock extends JFrame implements ActionListener {
JTextField stockNo = new JTextField(4);
JButton addButton = new JButton("ADD");
JSpinner quantitySlider = new JSpinner();
JTextArea catalog = new JTextArea(7, 30);
List items = new ArrayList();
public UpdateStock(){
setLayout(new BorderLayout());
setBounds(100, 100, 450, 500);
setTitle("Update Stock");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel top = new JPanel();
add("North", top);
JPanel middle = new JPanel();
add("Center", middle);
top.add(stockNo);
top.add(quantitySlider);
top.add(addButton);
catalog.setLineWrap(true);
catalog.setWrapStyleWord(true);
catalog.setEditable(false);
middle.add(new JScrollPane(catalog));
for(String key : StockData.getStock().keySet()) {
catalog.append("Item: " + key +"\n");
items.add(StockData.getName(key));
catalog.append("Name: " + StockData.getName(key) +
" Price: " + StockData.getPrice(key) +
" Qty: " + StockData.getQuantity(key)+"\n");
}
setResizable(false);
setVisible(true);
}
}
我沒有在您的其他文章上發佈完整的示例嗎? – JayC667
@ JayC667我已經看到了這個例子,它對我來說是理解或者通過的方式,而且我沒有看到使用列表將數據從散列表複製到列表中,並且將存儲它所需的內存量加倍 – Higeath
嗯......呃......實際上每個*對象引用只需要4個字節*,因爲實際的對象不會被複制。是的,這是相當大的,但它是一個非常乾淨和容易擴展的例子。這是基本的想法,有兩個不同的物品清單,因爲庫存和購物車** HAPPEN TO BE **兩個完全不同的清單,具有不同的*目的*。不要擔心那裏的內存大小,應用程序中至少有一百萬個這樣的對象,並且沒有任何內存問題。 – JayC667