|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。创立默许的JComboBox没法在每一个条目上显现图标、缩进等款式。可是Swing的MVC计划布局为各类组件供应了无与伦比的可扩大性。为了完成这一点,我们能够创立一个新的Renderer来卖力每一个条目标绘制。
起首我们新写一个类ImagedComboBoxItem,它封装了一个下拉条目标信息,包含图标、笔墨、缩进等:
classImagedComboBoxItem{
privateIconicon=null;
privateStringtext=null;
privateintindent=0;
ImagedComboBoxItem(Stringtext,Iconicon,intindent){
this.text=text;
this.icon=icon;
this.indent=indent;
}
publicStringgetText(){
returntext;
}
publicIcongetIcon(){
returnicon;
}
publicintgetIndent(){
returnindent;
}
}
然后新建JImagedComboBox类并从JComboBox承继。在机关函数中,新建一个DefaultListCellRenderer作为新的Renderer,并掩盖其getListCellRendererComponent办法。在新的getListCellRendererComponent办法中,起首仍旧挪用父对象的该办法,以便完成一般条目标绘制;然后判别条目是不是是ImagedComboBoxItem实例。假如是,则显现ImagedComboBoxItem的笔墨、图标,并显现缩进。为了更便利的显现左边缩进,我们间接创立一个EmptyBorder并设置左边缩进数目,并设置到DefaultListCellRenderer中。DefaultListCellRenderer从JLabel承继而来,以是可间接承受各类Border。这里我们以每一个缩进10象素为例。
好了,以下是完全代码:
importjava.util.*;
importjava.awt.*;
importjavax.swing.*;
publicclassJImagedComboBoxextendsJComboBox{
publicJImagedComboBox(Vectorvalues){
super(values);
ListCellRendererrenderer=newDefaultListCellRenderer(){
publicComponentgetListCellRendererComponent(
JListlist,
Objectvalue,
intindex,
booleanisSelected,
booleancellHasFocus){
super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
if(valueinstanceofImagedComboBoxItem){
ImagedComboBoxItemitem=(ImagedComboBoxItem)value;
this.setText(item.getText());
this.setIcon(item.getIcon());
if(isPopupVisible()){
intoffset=10*item.getIndent();
this.setBorder(BorderFactory.createEmptyBorder(0,offset,0,0));
}
}
returnthis;
}
};
this.setRenderer(renderer);
}
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame();
frame.setSize(400,400);
Vectorvalues=newVector();
IconopenIcon=newImageIcon(JImagedComboBox.class.getResource("Open16.gif"));
IconnewIcon=newImageIcon(JImagedComboBox.class.getResource("New16.gif"));
for(inti=0;i<5;i++){
values.addElement(newImagedComboBoxItem("Directory"+i,openIcon,i));
}
for(inti=0;i<5;i++){
values.addElement(newImagedComboBoxItem("ImageItem"+i,newIcon,5));
}
JImagedComboBoxcomboBox=newJImagedComboBox(values);
frame.getContentPane().add(comboBox,BorderLayout.NORTH);
frame.show();
}
}
classImagedComboBoxItem{
privateIconicon=null;
privateStringtext=null;
privateintindent=0;
ImagedComboBoxItem(Stringtext,Iconicon,intindent){
this.text=text;
this.icon=icon;
this.indent=indent;
}
publicStringgetText(){
returntext;
}
publicIcongetIcon(){
returnicon;
}
publicintgetIndent(){
returnindent;
}
}
个中,两个图标在这里:Open16.gif,New16.gif
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。 |
|