2012-02-05 49 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。但不要混淆视口的布局。