2016-11-20 85 views
2

我在Java程序中有兩個選項卡。一個添加一個股票,另一個列出我創建的股票。當我在第二個選項卡中添加一個新項目時,我試圖找到更新第一個選項卡中的項目列表。有任何想法嗎?將項目添加到JList時更新JTabbedPane

我想第一個選項卡顯示的項目,我創造的第二個選項卡的列表...

public class StocksGUI extends javax.swing.JFrame { 

private JTextField stock, qty, purchasePrice, currentPrice; 
private JButton addStockButton; 
private JList<StockClass> stockList; 
private DefaultListModel<StockClass> stockModel; 


public StocksGUI() 
{ 
    super("Portfolio Management"); 
    stock = new JTextField(); 
    qty = new JTextField(); 
    purchasePrice = new JTextField(); 
    currentPrice = new JTextField(); 
    addStockButton = new JButton("Add Stock"); 

    stockList = new JList<>();   
    stockModel = new DefaultListModel<StockClass>(); 



    JTabbedPane tab =new JTabbedPane(); 

    JPanel p2 = new JPanel(); 
    if(stockModel.size() > 1) 
    { 
    stockList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    p2.add(new JScrollPane(stockList)); 
    } 
    else 
    { 
    p2.add(new JLabel("Currently No Stocks")); 
    tab.addTab("List",null, p2, " Panel #2"); 
    } 


    JPanel p1 = new JPanel(new GridLayout(5,2)); 
    p1.add(new JLabel("Stock")); 
    p1.add(stock); 
    p1.add(new JLabel("Quantity")); 
    p1.add(qty); 
    p1.add(new JLabel("Purchase Price")); 
    p1.add(purchasePrice); 
    p1.add(new JLabel("Current price")); 
    p1.add(currentPrice); 
    p1.add(addStockButton); 
    tab.addTab("Add Stock",null, p1," Panel #1"); 

    add(tab); 



    TickerAdd ta = new TickerAdd(); 
    TickerAdd.StockADD stad = ta.new StockADD(); 
    addStockButton.addActionListener(stad); 

} 



     public class TickerAdd 
{ 
    public class StockADD implements ActionListener 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 

     StockClass passing = new StockClass(); 
     passing.stock = stock.getText(); 
     passing.qty = Integer.parseInt(qty.getText()); 
     passing.pp = Double.parseDouble(purchasePrice.getText()); 
     passing.cp = Double.parseDouble(currentPrice.getText()); 
     stockModel.addElement(passing); 
     stockList.setModel(stockModel); 


     StockBackEnd sh = new StockBackEnd(); 

     sh.ClearInput(); 
     stock.setText(sh.GetStockName()); 
     qty.setText(String.valueOf(sh.GetQTY())); 
     purchasePrice.setText(String.valueOf(sh.GetPP())); 
     currentPrice.setText(String.valueOf(sh.GetCP())); 

     } 

    } 

} 

在此處輸入數據:

Data goes in

和數據應顯示這裏:

Data out

回答

1

你n eed將包含JList的JScrollPane添加到您的GUI。你的代碼沒有這樣做,所以列表從不顯示。是的,你有這樣做的代碼,但它在一個if塊中,一個塊,其代碼被稱爲只有一次,當時if條件保證是錯誤的。所以要麼擺脫if區塊,不管模型大小如何都調用該代碼,要麼在動作偵聽器中放置交換代碼,以便多次調用它。還要注意,使用CardLayout進行交換更好也更容易。

此外,您還想在程序啓動時將模型添加到JList中。

+0

你是對的!謝謝!懂得工作 – DevDavid

+0

@DevDavid:不客氣。我認爲你的錯誤在於,一旦模型的大小大於0,if塊會被神奇地調用,但正如你發現的那樣,Java中沒有魔法 - 代碼只運行你所說的運行,如果你想讓if塊第二次運行,你需要把它放到一個監聽器中。 –