2016-11-20 4 views
2

Java 프로그램에 두 개의 탭이 있습니다. 하나는 주식을 추가하고 다른 하나는 내가 만든 주식을 나열하는 것입니다. 두 번째 탭의 새 항목을 만들 때 첫 번째 탭에서 항목 목록을 업데이트하려고합니다. 어떤 아이디어?항목이 JList에 추가 될 때 JTabbedPane 업데이트

Data goes in

을 그리고 데이터를 표시해야합니다 :

나는

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 out

답변

1

당신은 n eed를 사용하여 JList가 포함 된 JScrollPane을 GUI에 추가합니다. 코드가 그렇게하지 않으므로 목록에 표시되지 않습니다. 예, 코드를 가지고 있는데, if 블록 내에서 if 조건이 false가 될 때 코드가 인 블록을 한 번만이라고 부릅니다. 따라서 if 블록을 없애고 모델의 크기에 관계없이 해당 코드를 호출하거나 액션 리스너 내에서 스와핑 코드를 두 번 이상 호출해야합니다. 또한 CardLayout을 사용하여 교체하는 것이 더 쉽고 간편하다는 점에 유의하십시오.

또한 프로그램 시작시 모델을 JList에 한 번 추가하려고합니다.

+0

정확합니다! 고맙습니다! 잘 했어. – DevDavid

+0

@DevDavid : 천만에. 제 생각에 당신의 오류는 모델의 크기가> 0이되면 블록이 마술처럼 다시 호출 될 것이라고 생각하는 것입니다 만, 알아 내면 자바에서 어떤 마법도 없습니다 - 코드는 실행하도록 지시 한 것만 실행합니다 if 블록을 두 번째로 실행하려면 리스너에 넣어야합니다. –