【问题标题】:how to display a JPanel inside a JScrollPane?如何在 JScrollPane 中显示 JPanel?
【发布时间】:2012-02-05 16:27:24
【问题描述】:

我正在为一个班级项目设计一个披萨外卖模拟器。我和我的团队已经完成了大部分工作,但我们在 GUI 方面遇到了困难。

我需要能够将商品添加到订单中。每次单击添加项目按钮时,它都会创建一个新的 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

【问题讨论】:

  • 我从来不需要设置视口的布局,并怀疑这不是一件好事。
  • 另见ListDialog

标签: java swing user-interface jpanel jscrollpane


【解决方案1】:

我能想到的最好和最直接的解决方案是使用由 JScrollPane 保存的 JList 或 JTable。这些家伙比我想象的要灵活得多,如果使用正确的单元格渲染器,它们可以显示相当复杂的数据。如果你不能这样做,那么让 JScrollPane 的视口保持一个使用 GridLayout 的 JPanel。但不要弄乱视口的布局。

【讨论】:

    【解决方案2】:

    您必须将JPanel 添加到JScrollPane,然后将其他面板添加到该JPanelJScrollPanel 只能管理一个孩子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多