【问题标题】:How to create expandable panels using swing?如何使用 Swing 创建可扩展面板?
【发布时间】:2014-09-06 17:44:45
【问题描述】:

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

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

    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);

【问题讨论】:

  • 引用了一些相关的例子here

标签: java swing expand


【解决方案1】:

你可以看看SwingX项目中的JXTaskPaneContainerJXTaskPane,它们有这些优点:

  • 它们是组件,就像 JPanel 一样,因此使用它们不需要额外的努力。
  • 与手风琴不同,您可以在任意位置展开多个面板 时间。
  • 它们对折叠/展开事件具有酷炫和平滑的效果。
  • 与树/树表不同,您根本不必处理TreeModelTreeTableModel。此外,树和树表是旨在以分层形式显示数据的组件,而不是向其中添加组件。

如果您不喜欢任务窗格并想自己实现某些东西,那么您有 JXCollapsiblePane(也可在 SwingX API 中使用)。

查看SwingLabs Demos 获取完整的 SwingX 组件演示。

截图

【讨论】:

    【解决方案2】:

    查看 SwingX 项目中的 JXTreeTable:

    您还可以查看 JXTree,它是类似的,并且可能会更好,具体取决于您的具体需求。

    here获取。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • Accordion 是一个不同的组件,旨在随时显示单个面板。我不认为这是 OP 想要的。
      【解决方案4】:

      您必须在布局面板中放置一个网格面板。所以在布局面板的“北”部分,只需添加一列的夹子面板和你想要的原始数量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        相关资源
        最近更新 更多