2012-02-05 52 views
1

我正在爲一個類項目設計一個Pizza Delivery模擬器。我的團隊和我的大部分工作都已完成,但我們正在努力使用GUI。如何在JScrollPane中顯示JPanel?

我需要能夠添加項目的順序。每次單擊添加項目按鈕時,它都會創建一個新的AddItemPanel(我創建的用於擴展JPanel的面板),並將其添加到JScrollPane。

我遇到的問題是它只會將一個AddItemPanel添加到scrollPane。我不確定他們是否被隱藏在第一個下面,或者我只是在做一些愚蠢的事情。

下面是相關代碼:

JPanel itemPanel = new JPanel(new GridLayout(0, 1)); 

JViewPort viewPort = new JViewport(); 
viewPort.setLayout(new GridLayout(0, 1)); // not sure if I need this line 
JScrollPane scrollPane = new JScrollPane(viewPort); 
itemPanel.add(scrollPane); 

// other stuff 

JButton addItemButton = new JButton("Add Item"); 
addItemButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     viewPort.add(new AddItemPanel()); 
     validate(); 
    } 
}); 

所以我的問題是:這甚至可能有一個JScrollPane?如果是這樣,我該怎麼做?如果不是,我將如何完成類似的事情?

(PS。我已經聯繫屏幕截圖的情況下,他們在解釋有幫助的。)

screen shot 1 screen shot 2

+0

我從來沒有設置視口的佈局,並懷疑這不是一件好事。 – 2012-02-05 16:30:03

+0

另請參見['ListDialog'](http://stackoverflow.com/a/5760093/230513)。 – trashgod 2012-02-05 16:43:25

回答

3

你有一個JPanel添加到JScrollPane,然後添加其他面板到JPanelJScrollPanel只能管理一個孩子。

3

我能想到的最好和最直接的解決方案是使用由JScrollPane擁有的JList或JTable。這些人比我想象的要靈活得多,如果使用正確的單元格渲染器,可以顯示相當複雜的數據。如果你不能這樣做,那麼讓JScrollPane的視口保存一個使用GridLayout的JPanel。但不要混淆視口的佈局。