牛人你好,现在在做一个类似QQ,MSN之类的IM客户端,当名字读取进来过长超过16字节的时候,因为没有对名字长度进行限制,所以导致页面显示出现了问题。我想达到那种效果就是当名字过长的时候就用省略号来显示,但是当将那个IM客户端拖动放大的时候,又可以完整显示,说的更明白一点就是可以根据页面大小来显示名字,够大就显示完整,不够就把超过的部分用省略号显示。牛人些给个解决方法吧!谢谢啦!分不多,但仍然感激啊!

解决方案 »

  1.   

    <a herf="#" title="123456">123......</a>  是这样吗?
      

  2.   

    刚在web上实现了这个不过没有你这种拖动就跟着变的效果 因为我的单元格是固定宽度的
    我觉得你可以维护一个公共的List 里面放那些被“”的对象
    拖动界面之后 在repaint里面调用一个方法 方法用来重新计算宽度并设置“”要显示什么个人愚见
      

  3.   

    现在的MSN已经实现了这样的效果!大家可以去试一试看看!就是对自己的一个好友改一个很长的名字例如“今天晚上我要去打老虎你去不去啊”之类的都可以!然后观察就知道是怎么样的了!不过MSN不是用JAVA做的就是了!
      

  4.   

    http://www.gbsou.com/2010/01/20/1900.html这篇文章就是我为前台做的中文字符串截取 加上省略号
      

  5.   

    8楼的童鞋谢谢!也许你那样也可以,但是就需要我对多个页面的长度进行随时的得到,万一改变就需要去改变字体显示的字数,那样会比较麻烦,而且涉及到的GUI页面有好几个!!
    9楼的我还不懂!
    10楼的童鞋谢谢!你那个方法只是固定的截取长度,不能动态的改变!
      

  6.   

    9楼的同学,这个是纯java的GUI的东西!没有EL表达式!
      

  7.   


    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打开的就给你复制过来。取制定字节长度的字符串 汉字算两个字节
      

  8.   

    用Java可以通过判断长度进行截取 但是如果LZ想要完成的效果是放到HTML里去 有个样式是可以控制的
    (截取可以 但是不要截取掉某些关键的东西)
      

  9.   

    要多长,把你指定的字符串
    str = str.substring(0,i+1)+"..."
    不就行了
      

  10.   

    修改name的get方法如何?     public String getName(){
             if(name.length>4){
                return name.subStr(0,4)+"....";
             }else
                return name;
         }
      

  11.   

    j2se的应用吗?
    那么监听一下resize事件,把显示的字符串更新一下就可以了吧如果是j2ee,就用onresize和innerText配合一下。截取字符串加点的需求,apache的commons包里的StringUtil好像有,
    不过可能很少有人用到,因为这个车轮太太太....小了。good luck
      

  12.   

    20楼完全正确,截字符的过程可以写在javaBean里面.从javaBean里取出的数据就是已经经过加工的.
      

  13.   

    各位谢谢啦最终我找到的方法实现了这个效果!因为都是全是JAVA写的GUI。所以对布局要求比较高!
    最后我把名字放到一个
             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中他自己实现的吧!