牛人你好,现在在做一个类似QQ,MSN之类的IM客户端,当名字读取进来过长超过16字节的时候,因为没有对名字长度进行限制,所以导致页面显示出现了问题。我想达到那种效果就是当名字过长的时候就用省略号来显示,但是当将那个IM客户端拖动放大的时候,又可以完整显示,说的更明白一点就是可以根据页面大小来显示名字,够大就显示完整,不够就把超过的部分用省略号显示。牛人些给个解决方法吧!谢谢啦!分不多,但仍然感激啊!
解决方案 »
- Io 异常: The Network Adapter could not establish the connection
- 启动Tomcat时报Cannot create PoolableConnectionFactory错误。svn下载下来的同样的项目,别人没事就我的有事
- 求同时显示3个月的日历控件
- 关于编码
- js问题。
- 关于java调用sqlserver的事件探查器和oracle中的审计功能
- spring管理Hibernate的一个问题
- 什么是GA
- 关于struts的探讨!
- springmvc是单例的,开发的时候会不会影响性能呢?
- weblogic上部署多个web应用如何配置各自的log4j.properties
- 数组问题
我觉得你可以维护一个公共的List 里面放那些被“”的对象
拖动界面之后 在repaint里面调用一个方法 方法用来重新计算宽度并设置“”要显示什么个人愚见
9楼的我还不懂!
10楼的童鞋谢谢!你那个方法只是固定的截取长度,不能动态的改变!
public void getsubstring1(String content,int sublength)
{
int length = content.getBytes().length;
if(sublength>=length)
{
System.out.println(content);
}else
{
if(sublength<0)
{
System.out.println("长度设定错误");
}else
{
int i = 0;
int j = 0;
for(;i<length;i++)
{
if(content.substring(0,i+1).getBytes().length>=sublength)
{
j = content.substring(0,i+1).getBytes().length;
break;
}
}
String substring = j>sublength?content.substring(0,i):content.substring(0, i+1);
System.out.println(substring);
}
}
}
看看这段代码 刚好我ecipse打开的就给你复制过来。取制定字节长度的字符串 汉字算两个字节
(截取可以 但是不要截取掉某些关键的东西)
str = str.substring(0,i+1)+"..."
不就行了
if(name.length>4){
return name.subStr(0,4)+"....";
}else
return name;
}
那么监听一下resize事件,把显示的字符串更新一下就可以了吧如果是j2ee,就用onresize和innerText配合一下。截取字符串加点的需求,apache的commons包里的StringUtil好像有,
不过可能很少有人用到,因为这个车轮太太太....小了。good luck
最后我把名字放到一个
JLable usernameLabel = new JLabel();
usernameLabel.setHorizontalTextPosition(JLabel.LEFT);
usernameLabel.setFont(new Font("Dialog", Font.BOLD, 15));
usernameLabel.setForeground(Color.GRAY);
if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) {
usernameLabel.setText(firstName + " " + lastName);
}
else {
String nickname = Manager.getUserManager().getUserNicknameFromID(id);
usernameLabel.setText(UserManager.unescapeID(nickname));
}
final Icon icon = Manager.getChatManager().getIconForContactHandler(vcard.getId());
if (icon != null) {
usernameLabel.setIcon(icon);
}
add(usernameLabel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 0), 0, 0));
这个是程序中的部分代码,经过这样的添加后,usernameLabel.setText中的名字就可以根据界面的大小自动的加上省略号了!具体的可能是在JLable中他自己实现的吧!