如何使用swing创建可扩展面板?

时间:2014-09-06 17:44:46

标签: java swing expand

我想创建一个展开和折叠面板列表,如下图所示:

expandand collapse panels

我还没有找到任何摆动组件,所以我开始创造这样的东西。 我试图把按钮放在另一个下面,这填补了可用的宽度,但是并没有真正起作用。我只能看到最后添加的一个。

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());

    panel.add(new JButton("Delphi Projects"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel
    panel.add(new JButton("Delphi Projects | Delphi Files"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel
    panel.add(new JButton("Other Files"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel
    panel.add(new JButton("C++ Builder Projects | C++ Builder Files"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel

    JScrollPane scroll = new JScrollPane(panel);

4 个答案:

答案 0 :(得分:12)

您可以查看具有以下优势的SwingX项目中的JXTaskPaneContainerJXTaskPane

  • 它们就像JPanel一样是组件,所以不需要额外的努力来处理它们。
  • 与手风琴不同,你可以在任何一个手机上展开多个面板 时间。
  • 它们对折叠/扩展事件有一个很酷而平稳的效果。
  • 与树木/树表不同,您根本不必弄乱TreeModelTreeTableModel。树和树表也是用于以层级形式显示数据的组件,而不是向其中添加组件。

如果您不喜欢任务窗格并希望自己实现某些功能,则可以使用JXCollapsiblePane(也可在SwingX API中使用)。

检查SwingLabs Demos以获取一整套SwingX组件演示。

截图

enter image description here

答案 1 :(得分:4)

从SwingX项目中查看JXTreeTable: JXTreeTable in action

您可能还会看到类似的JXTree,可能会更好,具体取决于您的确切需求。

here获取。

答案 2 :(得分:2)

您正在寻找的组件是手风琴。看看这个问题: Accordion for Swing?

至于您的代码 - 您只能看到最后一个代码,因为您要将它们全部添加到具有BorderLayout的面板,其中BorderLayout.North作为布局约束。每一个都删除以前添加的面板。尝试切换到另一个布局 - 例如BoxLayout

答案 3 :(得分:0)

您必须在布局面板中放置一个网格面板。因此,在布局面板的“北”部分中,只需添加一栏的抓取面板和所需的原始数量