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实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
点击“高级属性”,可以对本栏目设置高级属性,如浏览权限、投稿权限、评论控制、顶踩控制、是否在导航栏显示等,如下图所示: 点击“模板选择”,可以设置该栏目的栏目页显示模板、勾选栏目对应的内容模型及模型...
� GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。 � Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA ...
ejb端 jsfejb3-ejb |-- src |-- org.qiujy.ejb3.dao 持久层DAO接口包 |-- org.qiujy.ejb3.dao.impl 持久层DAO接口实现类包(是ejb3中的会话Bean) |-- org.qiujy.ejb3.entity 实体域模型类包...
步骤3 打开控制面板,单击“添加删除程序”图标,然后在窗口左侧导航栏上单击“添加/删除Windows组件”按钮,在打开的“Windows组件向导” 中,选中“Internet信息服务(IIS)”前的复选框。单击右下角的“详细信息”...
FAV:Microsoft Outlook导航条 FAX:传真类型图像 FCD:虚拟CD-ROM FDF:Adobe Acrobat表单文档文件 FLA:Macromedia Flash电影 FND:Microsoft Explorer保存的搜索文件(Find applet) FON:系统字体 FRT:...
运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中...
传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP...
Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了这一工具的威力。如何才能让更多人有效地学习和掌握SQL呢?Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习...