java固定宽高的窗口内drawstring换行

拼接分享到朋友圈的二维码图片中用到的,java awt里面的draw string不提供换行,只能自己手写。这里传入String类型的文本,返回String类型的list,每个element为一行的string。

 /**
     * 文本分行
     * @param context 原文本
     * @param windowWidth 文本框宽度
     * @param windowHeight 文本框高度
     * @param fontMetrics 文本字体格式
     * @return 分行后的文本list
     */
    private List<String> multiRows(String context, Integer windowWidth, Integer windowHeight, FontMetrics fontMetrics ){

        Integer contextWidth = fontMetrics.stringWidth(context);
        Integer fontHeight = fontMetrics.getHeight();
        List<String> rowsContext = new ArrayList<>();


        if (contextWidth < windowWidth && !context.contains("\n")){
            rowsContext.add(context);
            return rowsContext;
        }else{
            int row = 0;
            int i = 0;
            for (; i < context.length(); i ++){

                if(fontHeight * row > windowHeight)
                    break;

                while (i < context.length() && fontMetrics.stringWidth(context.substring(0,i)) <= windowWidth){
                    if (context.substring(i, i + 1).equals("\n")){
                        break;
                    }
                    i++;
                }
                if(i == context.length()){
                    break;
                }

                rowsContext.add(context.substring(0,i));
                row ++;

                if (i == context.length() - 1){
                    if (context.substring(i, i + 1).equals("\n")){
                        context = "";
                        break;
                    }else{
                        rowsContext.add(context.substring(i));
                        context = "";
                        break;
                    }
                }else {
                    if(context.substring(i, i + 1).equals("\n")){
                        context = context.substring(i + 1);
                    }else {
                        context = context.substring(i);
                    }
                }
                i = 0;
            }
            if (StringUtils.isNotBlank(context) && fontHeight * row < windowHeight) {
                rowsContext.add(context);
            }
        }
        return rowsContext;
    }

猜你喜欢

转载自blog.csdn.net/u013414218/article/details/85001796