JavaSwing JTextArea 自动换行并计算文本行数

好久没有更新了,也没有怎么去增加一些知识点,这不,今天,有个JavaSwing的组件里面,需要滚动的,可以上下滚动,和左右滚动,嗯这个,估计也没有人需要完整的滚动组件吧,我这里就简单写一下JTextArea 自动换行吧,计算文本行数的计算方式,我也百度了,但是,并没有什么可用的例子,就自己写了一个,不一定是最好的方式,但是,挺适合我目前的需求的,如果你正好看到,并且需要,可用拿去用用,废话不多说,下面直接开始记录了,呃,还是要说一下哈,并不高端,不喜勿喷,谢谢,

1、主要就是,你收到的滚动消息内容,也就是,你要显示在组件内的文本内容;这里定义为RollMsgString;

2、就是,拿到数据后,对数据进行,设置,换行操作,JTextArea有个方法,直接设置换行的可以,就是

 msgArea.setLineWrap(true);

3、就是,定义要显示的宽度,和组件要显示的高度,这里定义为viewHight、viewWidth;

4、要知道显示数据的字体Font,这个是你自己设置的,我就不过多重复,你自己看着设置

5、需要一个方法,这个方法是可以计算文本内容的宽度的,下面直接摘抄出来

 /**
     * 获取文本单行宽度
     *
     * @param text
     * @param font
     * @return
     */
    public static Integer getRollMsgWidth(String text, Font font) {
        FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(font);
        int width = SwingUtilities.computeStringWidth(fm, text);
        return width;
    }

6、下面就可以直接使用方法了,因为,只是一个方法,所以,我就尽可能的把内容里面的名称注释一下,方便大家理解,上代码:

 /**
     * 判断滚动数据行数
     *
     * @param rollMsg
     * @param font
     * @return
     */
    public int checkRollMsgLine(String rollMsg, Font font) {
        //单行宽度---这里就是你滚动组件的宽度,具体需要你自己算,既然要换行,肯定是上下滚动
        int sigleLineWidth = viewWidth - msgLeftMargin - msgRightMargin;
        //总共行数------这个变量就是计算结果的总共行数
        int rollMsgCount = 0;
        //对换行符进行切割-----如果文本里面有换行符,那就直接进行比对,当然,你也可以加上‘\r’
        //这里我就值是检索了‘\n’
        String[] msgArray = rollMsg.split("\n");
        //将代码分块后进行循环遍历
        for (int a = 0; a < msgArray.length; a++) {
            int newLinecount = 1;
            int length = msgArray[a].length();
            int allMsgWidth = 0;
            //计算每块的行数
            for (int b = 0; b < length; b++) {
                String substring = msgArray[a].substring(b, b + 1);
                Integer widthString = getRollMsgWidth(substring, font);
                allMsgWidth += widthString;
                if (allMsgWidth >= sigleLineWidth) {
                    newLinecount++;
                    allMsgWidth = widthString;
                }
            }
            rollMsgCount += newLinecount;
        }
        return rollMsgCount;
    }

7、总体就是这么简单,不是什么厉害的东西,但是,也是自己写的,如果写的不好,希望路过的大神不要喷,可以指点一二,目的就是为了需要的朋友们直接拿去用,另外就是,自己以后需要的话,回过头来直接使用,整体也有一个完整的JavaSwing的滚动完整组件,可以上下和左右滚动,我是觉得大家不会需要,如果有人需要的话,可以联系我,我到时候,再补上一个博客也是可以的,嗯,就这些吧,记录到此。喜欢的话,请点个赞,支持一下哦,3q  ~-~。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值