时间:2021-05-20
1.原理
原理非常简单:就是一个JLabel和JPanel。Jlabel显示标题文字以及标明控件当前是处于展开还是折叠状态的图片;而JPanel主要就一个作用——承载控件的容器。JLabel通过响应鼠标事件来控制JPanel是否显示。这样就可以达到折叠或展开的效果。
下面话不多说了,来一起看看详细的示例代码
2.代码
public class JShrinkablePanel extends JPanel {private JLabellabel;private Stringtitle ="";private JPanelcontentPanel =null;private boolean isExpanded =true;private JListlist =new JList();private IconiconExpand =null;private IconiconCollapse =null;public JShrinkablePanel(String title, JPanel contentPanel) {super();this.title = title;this.contentPanel = contentPanel;initComponents();initComponentsStatus();initLayout();initResources();unRegisterEvents();registerEvents();}private void initComponents() {this.label =new JLabel();}private void initComponentsStatus() {this.label.setHorizontalAlignment(JLabel.LEFT);this.label.setVerticalAlignment(JLabel.CENTER);this.label.setVerticalTextPosition(JLabel.CENTER);this.label.setBackground(this.list.getSelectionBackground());this.iconExpand =new ImageIcon("src/Resources/Expand.png");this.iconCollapse =new ImageIcon("src/Resources/Collapse.png");}private void initLayout() {this.setLayout(new GridBagLayout());this.add(this.label,new GridBagConstraints(0,0,1,1,1,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,new Insets(0,0,0,0),0,0));this.add(this.contentPanel,new GridBagConstraints(0,1,1,1,1,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,new Insets(0,0,0,0),0,0));}private void initResources() {this.label.setIcon(this.iconExpand);this.label.setText(this.title);}private void unRegisterEvents() {this.label.removeMouseListener(this.mouseListener);}private void registerEvents() {this.label.addMouseListener(this.mouseListener);}private MouseListenermouseListener =new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {isExpanded = !isExpanded;panelVisible();}@Overridepublic void mouseEntered(MouseEvent e) {label.setOpaque(true);label.repaint();}@Overridepublic void mouseExited(MouseEvent e) {label.setOpaque(false);label.repaint();}};private void panelVisible() {this.contentPanel.setVisible(this.isExpanded);this.label.setIcon(this.isExpanded ?this.iconExpand :this.iconCollapse);}public static void main(String[] args) {JFrame jf =new JFrame("JShrinkablePanel");jf.setBounds(400,200,400,300);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel panel=new JPanel();panel.add(new JButton("Just for show"));panel.setBorder(BorderFactory.createTitledBorder("Border"));JShrinkablePanel scrollPane=new JShrinkablePanel("TestJShrinkablePanel",panel);jf.add(scrollPane);jf.setVisible(true);}}3.效果
panel展开鼠标在标题Label上
panel展开鼠标没在标题Label上
panel折叠鼠标在标题Label上
panel折叠鼠标没在标题Label上
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
纯CSS实现的滑动的可折叠菜单/*===============================================================
本文实例讲述了JS+CSS实现的可折叠展开多级菜单效果。分享给大家供大家参考。具体如下:这是一款JS+CSS实现的多级折叠菜单,可折叠展开/合拢,没有引用任何的
本文实例讲述了js实现顶部可折叠的菜单工具栏效果。分享给大家供大家参考。具体实现方法如下:可以折叠的菜单工具栏html,body{margin:0;}body{
据外媒报道,苹果最新的一项专利申请描述了用更实用的方法来生产可折叠iPhone或iPad。不过,这个方法与微软的有些雷同。到目前为止,市面上出现的各种可折叠智能
1月3日早间消息,据外媒引述业内人士报道称,三星显示与华为已开始为华为将于下半年发布的新款可折叠智能手机开发可折叠OLED面板。 华为首款可折叠智能手机M