热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swing组件Collapse折叠面板

Collapse折叠面板折叠面板可以用作空间上合理利用,可以随心所欲展开喜欢的内容,收起不喜欢的内容.比如在idea编辑器中通过alt4唤醒运行日志,再次alt4可以隐藏.在h5

Collapse折叠面板

折叠面板可以用作空间上合理利用,可以随心所欲展开喜欢的内容,收起不喜欢的内容.
比如在idea编辑器中通过alt+4唤醒运行日志,再次alt+4可以隐藏.
在h5中,可以通过很简单的display属性实现,


思路


  • 总面板以标题区域和内容区域组成
  • 点击标题区域时隐藏内容区域,再次点击显示内容区域,重复此流程
    那么关心的核心内容就是内容区域是否是显示状态
  • 隐藏内容组件同时,需要隐藏内容组件的占用空间,那么可以借助JXMultiSplitPane来处理

swing实现

在这里插入图片描述


代码


tips


  • 需要swing 布局\内置组件\事件有一定了解
  • 需要swingx有一定了解

import cn.hutool.core.util.RandomUtil;
import com.formdev.flatlaf.FlatLightLaf;
import com.mynote.core.ui.BorderBuilder;
import com.mynote.core.ui.ColorBuilder;
import com.mynote.core.util.FrameUtil;
import com.mynote.core.view.Row;
import com.mynote.example.demo.AbstractDefaultPanel;
import org.jdesktop.swingx.JXMultiSplitPane;
import org.jdesktop.swingx.MultiSplitLayout;import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;/*** 折叠面板测试*/
public class CollapseTest extends AbstractDefaultPanel {private Icon collapsedIcon;private Icon expandedIcon;private MultiSplitLayout multiSplitLayout;private JXMultiSplitPane collapsePanel;private Row title;private JLabel titleLabel;private Row content;@Overrideprotected void init() {/*切割面板布局*/String defaultLayout = "(COLUMN " +"(LEAF name=title weight=0.1)" +"(LEAF name=content weight=0.9)" +")";multiSplitLayout = new MultiSplitLayout(MultiSplitLayout.parseModel(defaultLayout));collapsedIcon = UIManager.getIcon("Tree.collapsedIcon");expandedIcon = UIManager.getIcon("Tree.expandedIcon");collapsePanel = new JXMultiSplitPane();collapsePanel.setLayout(multiSplitLayout);collapsePanel.setBackground(Color.white);collapsePanel.setBorder(BorderFactory.createLineBorder(ColorBuilder.LABEL_GRAY_COLOR1));createTitle();createContent();}private void createTitle() {title = new Row();titleLabel = new JLabel("collapse测试", collapsedIcon, SwingConstants.CENTER);title.add(titleLabel);collapsePanel.add(title, "title");}private void createContent() {content = new Row();String text = RandomUtil.randomString(200);JTextArea textArea = new JTextArea(text);textArea.setPreferredSize(new Dimension(400, 200));textArea.setEditable(false);textArea.setLineWrap(true);textArea.setBackground(Color.white);content.setBackground(Color.white);content.add(textArea);collapsePanel.add(content, "content");}@Overrideprotected void render() {multiSplitLayout.displayNode("content",false);multiSplitLayout.layoutByWeight(title);view.add(collapsePanel, "center,w 400");super.add(view);}@Overrideprotected void bindEvents() {title.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {boolean isShow = content.isVisible();multiSplitLayout.displayNode("content",!isShow);if (isShow) {titleLabel.setIcon(collapsedIcon);title.setBorder(BorderFactory.createEmptyBorder());} else {titleLabel.setIcon(expandedIcon);title.setBorder(BorderBuilder.bottomBorder(1, ColorBuilder.LABEL_GRAY_COLOR1));}
// collapsePanel.revalidate();
// collapsePanel.repaint();multiSplitLayout.layoutByWeight(title);}});}public static void main(String[] args) {FlatLightLaf.install();FrameUtil.launchTest(new CollapseTest());}
}

推荐阅读
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 前端开发工程师必读书籍有哪些值得推荐?我们直接进入代码复杂版式设置,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • 数学建模入门python绘制频率直方图
    文章目录例题数据处理绘图操作调用演示例题数据处理将以下的数据保存到磁盘上17275169551696417165167471716216867165521696216865 ... [详细]
author-avatar
手机用户2602915825_387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有