`
love19820823
  • 浏览: 933744 次
文章分类
社区版块
存档分类
最新评论

Java实现类Windows导航栏

 
阅读更多
Java实现类Windows导航栏

在Windows系统中,通常都会有左侧导航栏以供选择,而Java架构下并没有给我们提供同样的组件,但是构建同样的东西实际上是很容易的。

packageorg.loon.framework.swing.test;

importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Dimension;
importjava.awt.EventQueue;
importjava.awt.Font;
importjava.awt.GradientPaint;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.GridLayout;
importjava.awt.Insets;
importjava.awt.Rectangle;

importjava.awt.event.ComponentAdapter;
importjava.awt.event.ComponentEvent;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;

importjavax.swing.BorderFactory;
importjavax.swing.ButtonGroup;
importjavax.swing.JCheckBox;
importjavax.swing.JComponent;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JRadioButton;
importjavax.swing.JScrollPane;
importjavax.swing.JSplitPane;
importjavax.swing.SpringLayout;
importjavax.swing.WindowConstants;
importjavax.swing.border.Border;

/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*
@authorchenpeng
*@email:ceponline@yahoo.com.cn
*
@version0.1
*/


publicclassExampleAccordionextendsJPanel...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

privatefinalJPanelpanel=newJPanel();

privatefinalJLabellabel=newJLabel();

//分割窗体
privatefinalJSplitPanesplit=newJSplitPane();

privatefinalJScrollPanescroll;

//折叠效果
publicExampleAccordion()...{
super(newBorderLayout());
panel.setOpaque(
true);
panel.setBackground(
newColor(116,149,226));
//滚动条
scroll=newJScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroll.getVerticalScrollBar().setUnitIncrement(
10);
scroll.getViewport().add(panel);

//构建数据列表
ListpanelList=makeList();
//设定监听
accordionListenerexr=newaccordionListener()...{
publicvoidaccordionStateChanged(accordionEvente)...{
initComponent();
}

}
;
for(Iteratorit=panelList.iterator();it.hasNext();)...{
AccordionPanelepl
=(AccordionPanel)it.next();
addComponent(epl);
epl.addaccordionListener(exr);
}

//加载滚动条监听
scroll.getViewport().addComponentListener(newComponentAdapter()...{
publicvoidcomponentResized(ComponentEvente)...{
initComponent();
}

}
);
//设定大小
label.setPreferredSize(newDimension(200,260));

scroll.setPreferredSize(
newDimension(200,260));

scroll.setMinimumSize(
newDimension(200,260));

split.setLeftComponent(scroll);
split.setRightComponent(label);

split.setDividerSize(
1);
split.setBackground(Color.WHITE);
add(split,BorderLayout.CENTER);
}


publicvoidinitComponent()...{
Rectanglere
=scroll.getViewport().getViewRect();
Insetsins
=panel.getInsets();
intcw=(int)re.getWidth()-ins.left-ins.right-20;
intch=10;
Component[]list
=panel.getComponents();
for(inti=0;i<list.length;i++)...{
JComponenttmp
=(JComponent)list[i];
intth=tmp.getPreferredSize().height;
tmp.setPreferredSize(
newDimension(cw,th));
ch
=ch+th+10;
}

panel.setPreferredSize(
newDimension((int)re.getWidth(),ch+ins.top
+ins.bottom));
panel.revalidate();
}


publicvoidaddComponent(Componentlabel)...{
SpringLayoutlayout
=newSpringLayout();
Component[]list
=panel.getComponents();
if(list.length==0)...{
layout.putConstraint(SpringLayout.WEST,label,
10,
SpringLayout.WEST,panel);
layout.putConstraint(SpringLayout.NORTH,label,
10,
SpringLayout.NORTH,panel);
}
else...{
JComponentcmp
=null;
for(inti=0;i<list.length;i++)...{
JComponenttmp
=(JComponent)list[i];
layout.putConstraint(SpringLayout.WEST,tmp,
10,
SpringLayout.WEST,panel);
if(cmp==null)...{
layout.putConstraint(SpringLayout.NORTH,tmp,
10,
SpringLayout.NORTH,panel);
}
else...{
layout.putConstraint(SpringLayout.NORTH,tmp,
10,
SpringLayout.SOUTH,cmp);
}

cmp
=tmp;
}

layout.putConstraint(SpringLayout.WEST,label,
10,
SpringLayout.WEST,panel);
layout.putConstraint(SpringLayout.NORTH,label,
10,
SpringLayout.SOUTH,cmp);
}

panel.add(label);
panel.setLayout(layout);
initComponent();
}


privateListmakeList()...{
ListpanelList
=newArrayList();
panelList.add(
newAccordionPanel("列表1")...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

publicJPanelmakePanel()...{
JPanelpnl
=newJPanel(newGridLayout(0,1));
JCheckBoxc1
=newJCheckBox("aaaaaa");
JCheckBoxc2
=newJCheckBox("bbbbbb");
c1.setOpaque(
false);
c2.setOpaque(
false);
pnl.add(c1);
pnl.add(c2);
pnl.setSize(
newDimension(0,60));
pnl.setBorder(BorderFactory.createEmptyBorder(
5,15,5,15));
returnpnl;
}

}
);
panelList.add(
newAccordionPanel("列表2")...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

publicJPanelmakePanel()...{
JPanelpnl
=newJPanel(newGridLayout(0,1));
pnl.add(
newJLabel("辛苦遭逢起一经"));
pnl.add(
newJLabel("干戈寥落四周星"));
pnl.add(
newJLabel("山河破碎风飘絮"));
pnl.add(
newJLabel("身世浮沉雨打萍"));
pnl.setSize(
newDimension(0,100));
pnl.setBorder(BorderFactory.createEmptyBorder(
5,15,5,15));
returnpnl;
}

}
);
panelList.add(
newAccordionPanel("列表3")...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

publicJPanelmakePanel()...{
JPanelpnl
=newJPanel(newGridLayout(0,1));
JRadioButtonb1
=newJRadioButton("aa");
JRadioButtonb2
=newJRadioButton("bb");
JRadioButtonb3
=newJRadioButton("cc");
b1.setOpaque(
false);
b2.setOpaque(
false);
b3.setOpaque(
false);
pnl.add(b1);
pnl.add(b2);
pnl.add(b3);
ButtonGroupbg
=newButtonGroup();
bg.add(b1);
bg.add(b2);
bg.add(b3);
b1.setSelected(
true);
pnl.setSize(
newDimension(0,80));
pnl.setBorder(BorderFactory.createEmptyBorder(
5,15,5,15));
returnpnl;
}

}
);
returnpanelList;
}


publicstaticvoidmain(String[]args)...{
EventQueue.invokeLater(
newRunnable()...{
publicvoidrun()...{
createUI();
}

}
);
}


publicstaticvoidcreateUI()...{
JFrameframe
=newJFrame("JAVA实现类Windows导航栏");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(
newExampleAccordion());
frame.pack();
frame.setLocationRelativeTo(
null);
frame.setVisible(
true);
}

}


classaccordionEventextendsjava.util.EventObject...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

publicaccordionEvent(Objectsource)...{
super(source);
}

}


interfaceaccordionListener...{
publicvoidaccordionStateChanged(accordionEvente);
}


abstractclassAccordionPanelextendsJPanel...{
abstractpublicJPanelmakePanel();

privatefinalString_title;

privatefinalJLabellabel;

privatefinalJPanelpanel;

privatebooleanopenFlag=false;

publicAccordionPanel(Stringtitle)...{
super(newBorderLayout());
_title
=title;
label
=newJLabel(""+title)...{
/***//**
*
*/

privatestaticfinallongserialVersionUID=1L;

protectedvoidpaintComponent(Graphicsg)...{
Graphics2Dg2
=(Graphics2D)g;
//绘制渐变
g2.setPaint(newGradientPaint(50,0,Color.WHITE,getWidth(),
getHeight(),
newColor(199,212,247)));
g2.fillRect(
0,0,getWidth(),getHeight());
super.paintComponent(g);
}

}
;
label.addMouseListener(
newMouseAdapter()...{
publicvoidmousePressed(MouseEventevt)...{
openFlag
=!openFlag;
initPanel();
fireaccordionEvent();
}

}
);
label.setForeground(
newColor(33,93,198));
label.setFont(
newFont("宋体",1,12));
label.setBorder(BorderFactory.createEmptyBorder(
2,5,2,2));
panel
=makePanel();
panel.setOpaque(
true);
BorderoutBorder
=BorderFactory.createMatteBorder(0,2,2,2,
Color.WHITE);
BorderinBorder
=BorderFactory.createEmptyBorder(10,10,10,10);
Borderborder
=BorderFactory.createCompoundBorder(outBorder,inBorder);
panel.setBorder(border);
panel.setBackground(
newColor(240,240,255));
add(label,BorderLayout.NORTH);
}


publicbooleanisSelected()...{
returnopenFlag;
}


publicvoidsetSelected(booleanflg)...{
openFlag
=flg;
initPanel();
}


protectedvoidinitPanel()...{
if(isSelected())...{
label.setText(
""+_title);
add(panel,BorderLayout.CENTER);
setPreferredSize(
newDimension(getSize().width,
label.getSize().height
+panel.getSize().height));
}
else...{
label.setText(
""+_title);
remove(panel);
setPreferredSize(
newDimension(getSize().width,
label.getSize().height));
}

revalidate();
}


protectedArrayListaccordionListenerList=newArrayList();

publicvoidaddaccordionListener(accordionListenerlistener)...{
if(!accordionListenerList.contains(listener))
accordionListenerList.add(listener);
}


publicvoidremoveaccordionListener(accordionListenerlistener)...{
accordionListenerList.remove(listener);
}


publicvoidfireaccordionEvent()...{
Listlist
=(List)accordionListenerList.clone();
Iteratorit
=list.iterator();
accordionEvente
=newaccordionEvent(this);
while(it.hasNext())...{
accordionListenerlistener
=(accordionListener)it.next();
listener.accordionStateChanged(e);
}

}

}



效果图:
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    JAVA上百实例源码以及开源项目源代码

     Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText(); //得到服务器地址  ...

    javapms门户网站源码

    点击“高级属性”,可以对本栏目设置高级属性,如浏览权限、投稿权限、评论控制、顶踩控制、是否在导航栏显示等,如下图所示: 点击“模板选择”,可以设置该栏目的栏目页显示模板、勾选栏目对应的内容模型及模型...

    新版Android开发教程.rar

    � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。 � Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA ...

    JSF1.2+EJB3.0实现的一个项目实例

    ejb端 jsfejb3-ejb |-- src |-- org.qiujy.ejb3.dao 持久层DAO接口包 |-- org.qiujy.ejb3.dao.impl 持久层DAO接口实现类包(是ejb3中的会话Bean) |-- org.qiujy.ejb3.entity 实体域模型类包...

    IIS6.0 IIS,互联网信息服务

    步骤3 打开控制面板,单击“添加删除程序”图标,然后在窗口左侧导航栏上单击“添加/删除Windows组件”按钮,在打开的“Windows组件向导” 中,选中“Internet信息服务(IIS)”前的复选框。单击右下角的“详细信息”...

    网管教程 从入门到精通软件篇.txt

    FAV:Microsoft Outlook导航条 FAX:传真类型图像 FCD:虚拟CD-ROM FDF:Adobe Acrobat表单文档文件 FLA:Macromedia Flash电影 FND:Microsoft Explorer保存的搜索文件(Find applet) FON:系统字体 FRT:...

    asp.net知识库

    运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了这一工具的威力。如何才能让更多人有效地学习和掌握SQL呢?Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习...

Global site tag (gtag.js) - Google Analytics