java 畫圖 Graphics 文字自動換行


    /**
     * 文字超出限定長度自動換行
     *
     * @param g           畫布
     * @param font        字體樣式
     * @param text        文字
     * @param widthLength 最大長度  (多少長度后需要換行)
     * @param x           文字位置坐標  x
     * @param y           文字位置坐標 Y
     * @param yn          每次換行偏移多少pt
     */
    private void drawString(Graphics2D g, Font font, String text, int widthLength, int x, int y, int yn) {

        FontMetrics fg = g.getFontMetrics(font);
        List<String> ls = new ArrayList<>(2);
        getListText(fg, text, widthLength, ls);
        for (int i = 0; i < ls.size(); i++) {
            if (i == 0) {
                g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y));
            } else {
                g.drawString(ls.get(i), (int) UnitConv.mm2pt(x), (int) UnitConv.mm2pt(y + yn));
            }
        }
    }


    /**
     * 遞歸 切割字符串
     * @param fg
     * @param text
     * @param widthLength
     * @param ls
     */
    private void getListText(FontMetrics fg, String text, int widthLength, List<String> ls) {
        String ba = text;
        boolean b = true;
        int i = 1;
        while (b) {
            if (fg.stringWidth(text) > widthLength) {
                text = text.substring(0, text.length() - 1);
                i++;
            } else {
                b = false;
            }
        }
        if (i != 1) {
            ls.add(ba.substring(0, ba.length() - i));
            getListText(fg, ba.substring(ba.length() - i), widthLength, ls);
        } else {
            ls.add(text);
        }
    }

 

畫圖中需要填寫文字,而文字大小不固定的時候就會超出畫布,顯示不了文字,就需要自動換行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM