首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java Swing中实现可折叠/可扩展的JPanel

如何在Java Swing中实现可折叠/可扩展的JPanel
EN

Stack Overflow用户
提问于 2011-11-18 12:54:02
回答 2查看 17.2K关注 0票数 11

我想要一个JPanel,它可以在用户单击其边框上的文本/图标时折叠或展开。我需要这种类型的面板,因为我的应用程序中的空间紧缩。

我读到过CollapsiblePanel类,但不确定如何使用它。我认为SwingX需要下载,但在任何地方都找不到。

此外,如果我在basic Java Swing中得到这个问题的解决方案,那会更好。

EN

回答 2

Stack Overflow用户

发布于 2011-11-18 13:20:40

我认为你可以使用JSplitPane来解决你的问题。利用属性巧妙地设置分频器的位置,就可以达到你想要的效果。

票数 1
EN

Stack Overflow用户

发布于 2018-10-24 03:46:55

所以这里有一个纯粹在Swing中的小类:)这个实现假定标题位于左上角……

代码语言:javascript
复制
import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class JCollapsiblePanel extends JPanel {
  private TitledBorder border;
  private Dimension visibleSize;
  private boolean collapsible;

  public JCollapsiblePanel(String title, Color titleCol) {
    super();

    collapsible = true;

    border = new TitledBorder(title);
    border.setTitleColor(titleCol);
    border.setBorder(new LineBorder(Color.white));
    setBorder(border);

    // as Titleborder has no access to the Label we fake the size data ;)
    final JLabel l = new JLabel(title);
    Dimension size = l.getPreferredSize();

    addMouseListener(new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        if (!collapsible) {
          return;
        }

        Insets i = getBorder().getBorderInsets(JCollapsiblePanel.this);
        if (e.getX() < i.left + size.width && e.getY() < i.bottom + size.height) {
          if (visibleSize == null || getHeight() > size.height) {
            visibleSize = getSize();
          }
          if (getSize().height < visibleSize.height) {
            setMaximumSize(new Dimension(visibleSize.width, 20000));
            setMinimumSize(visibleSize);
          } else {
            setMaximumSize(new Dimension(visibleSize.width, size.height));
          }
          revalidate();
          e.consume();
        }
      }
    });
  }

  public void setCollapsible(boolean collapsible) {
    this.collapsible = collapsible;
  }

  public void setTitle(String title) {
    border.setTitle(title);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8177955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档