欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行

 更新時(shí)間:2024年04月23日 16:34:13   作者:凌晨的集市人很少  
這篇文章主要為大家詳細(xì)介紹了Java如何使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

效果

代碼

    /**
     * @return void
     * @Author xia
     * @Description //TODO 寫(xiě)字換行算法
     * @Date 18:08 2021/4/1
     * @Param []
     **/
    private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {
        FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
        // 獲取字符的最高的高度
        int height = metrics.getHeight();
 
        int width = 0;
        int count = 0;
        int total = words.length();
        String subWords = words;
        int b = 0;
        for (int i = 0; i < total; i++) {
            // 統(tǒng)計(jì)字符串寬度 并與 預(yù)設(shè)好的寬度 作比較
            if (width <= wordsWidth) {
                width += metrics.charWidth(words.charAt(i)); // 獲取每個(gè)字符的寬度
                count++;
            } else {
                // 畫(huà) 除了最后一行的前幾行
                String substring = subWords.substring(0, count);
                g2d.drawString(substring, wordsX, wordsY + (b * height));
                subWords = subWords.substring(count);
                b++;
                width = 0;
                count = 0;
            }
            // 畫(huà) 最后一行字符串
            if (i == total - 1) {
                g2d.drawString(subWords, wordsX, wordsY + (b * height));
            }
        }
    }

調(diào)用

      // 添加第二行文字
            Font fontTwo = new Font("MIMO天線及其空口測(cè)試技術(shù)", Font.BOLD, 140  );
            graphics.setFont(fontTwo);
            graphics.setColor(Color.WHITE);
            String textTwo = "MIMO天線及其空口測(cè)試技術(shù)";
            int twoX = 50; // 第二行文字起始x坐標(biāo)
            int twoY = 480; // 第二行文字起始y坐標(biāo)
            drawWordAndLineFeed(graphics, fontTwo, textTwo, twoX, twoY, 1200);

知識(shí)補(bǔ)充

Java中使用Graphics2D實(shí)現(xiàn)字符串- 豎直并居中排序顯示算法

效果:

代碼:

    public static void drawMyString(Graphics textGraphics, String text) {
 
        // 每列顯示的漢字?jǐn)?shù)量
        int columnSize = 7;
        // 文字之間的垂直間距
        int verticalSpacing = 75;
 
        // 獲取字體渲染上下文
        FontMetrics fm = textGraphics.getFontMetrics();
        // 獲取字體的高度
        int fontHeight = fm.getHeight();
        System.out.println(fontHeight);
        // 計(jì)算每列的寬度
        int columnWidth = fontHeight + verticalSpacing;
 
        // 設(shè)置初始位置
        int x = 260;
        int y = 450;
        Font fontFour = new Font(" Source Han Sans CN", Font.BOLD, 100);
        textGraphics.setFont(fontFour);
 
        Color color = new Color(0, 88, 38);
        textGraphics.setColor(color);
//        // 繪制文字
        int charCount = 0;
        int totalColumns = (int)Math.ceil((double)text.length() / columnSize); // 總列數(shù)
        int totalRows = Math.min(columnSize, text.length()); // 總行數(shù)
        int remainingChars = text.length() % columnSize; // 最后一列剩余字符數(shù)
 
        for (int columnIndex = 0; columnIndex < totalColumns; columnIndex++) {
            for (int rowIndex = 0; rowIndex < totalRows; rowIndex++) {
                if (charCount >= text.length()) break;
                char ch = text.charAt(charCount);
//                // 計(jì)算當(dāng)前位置
                int cx = x - columnIndex * columnWidth;
                int cy = y + rowIndex * fontHeight + rowIndex * verticalSpacing; // 加入垂直偏移量
// 計(jì)算當(dāng)前位置
//                int cx = x - columnIndex * columnWidth;
//                int cy = y + rowIndex * fontHeight + rowIndex * verticalSpacing + columnIndex ;
 
                // 如果是最后一列并且不滿 7 個(gè)字符,則需要將剩余字符居中
                if (columnIndex == totalColumns - 1 && remainingChars > 0) {
                    int extraVerticalSpace = (columnSize - remainingChars) * (fontHeight + verticalSpacing) / 2;
                    cy += extraVerticalSpace;
                }
 
                // 繪制文字
                textGraphics.drawString(String.valueOf(ch), cx, cy);
                charCount++;
            }
        }
 
    }

調(diào)用:

        // TODO 講座名稱
        String lectureName = "時(shí)空相分離調(diào)控的職務(wù)細(xì)胞信號(hào)轉(zhuǎn)導(dǎo)";
        drawMyString(graphics, lectureName);

到此這篇關(guān)于Java使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行的文章就介紹到這了,更多相關(guān)Java Graphics2D字符串換行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring boot實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離的方法

    Spring boot實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離的方法

    本篇文章主要介紹了Spring boot實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Java中do-while循環(huán)的使用方法及注意事項(xiàng)詳解

    Java中do-while循環(huán)的使用方法及注意事項(xiàng)詳解

    這篇文章主要介紹了Java中do-while循環(huán)的使用方法及注意事項(xiàng)的相關(guān)資料,在Java編程中,do-while循環(huán)是一種基本的循環(huán)控制結(jié)構(gòu),它至少執(zhí)行一次循環(huán)體,然后根據(jù)條件判斷是否繼續(xù),文中將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • JAVA中的Launcher類解析

    JAVA中的Launcher類解析

    這篇文章主要介紹了JAVA中的Launcher類解析,Launcher作為JAVA應(yīng)用的入口,根據(jù)雙親委派模型,Laucher是由JVM創(chuàng)建的,它類加載器應(yīng)該是BootStrapClassLoader, 這是一個(gè)C++編寫(xiě)的類加載器,是java應(yīng)用體系中最頂層的類加載器,需要的朋友可以參考下
    2023-09-09
  • Spring中的自動(dòng)裝配機(jī)制詳解

    Spring中的自動(dòng)裝配機(jī)制詳解

    這篇文章主要介紹了Spring中的自動(dòng)裝配機(jī)制詳解,自動(dòng)裝配就是會(huì)通過(guò)Spring的上下文為你找出相應(yīng)依賴項(xiàng)的類,通俗的說(shuō)就是Spring會(huì)在上下文中自動(dòng)查找,并自動(dòng)給Bean裝配與其相關(guān)的屬性,需要的朋友可以參考下
    2023-08-08
  • Java遞歸實(shí)現(xiàn)評(píng)論多級(jí)回復(fù)功能

    Java遞歸實(shí)現(xiàn)評(píng)論多級(jí)回復(fù)功能

    這篇文章主要介紹了Java遞歸實(shí)現(xiàn)評(píng)論多級(jí)回復(fù)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • java并發(fā)鎖的實(shí)現(xiàn)

    java并發(fā)鎖的實(shí)現(xiàn)

    Java中的鎖主要是為了解決多個(gè)線程訪問(wèn)共享數(shù)據(jù)時(shí)的競(jìng)爭(zhēng)問(wèn)題,確保線程能夠安全地訪問(wèn)和修改共享數(shù)據(jù),本文主要介紹了java并發(fā)鎖的實(shí)現(xiàn),感興趣的可以了解一下
    2024-04-04
  • 基于SpringAop中JoinPoint對(duì)象的使用說(shuō)明

    基于SpringAop中JoinPoint對(duì)象的使用說(shuō)明

    這篇文章主要介紹了基于SpringAop中JoinPoint對(duì)象的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java Executors工具類的相關(guān)方法使用創(chuàng)建

    java Executors工具類的相關(guān)方法使用創(chuàng)建

    這篇文章主要為大家介紹了java Executors工具類的相關(guān)方法使用創(chuàng)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java實(shí)現(xiàn)圖片裁剪功能的示例詳解

    Java實(shí)現(xiàn)圖片裁剪功能的示例詳解

    這篇文章主要介紹了如何利用Java實(shí)現(xiàn)圖片裁剪功能,可以將圖片按照自定義尺寸進(jìn)行裁剪,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-01-01
  • 解析XML文件時(shí)的嵌套異常SAXParseException問(wèn)題

    解析XML文件時(shí)的嵌套異常SAXParseException問(wèn)題

    這篇文章主要介紹了解析XML文件時(shí)的嵌套異常SAXParseException問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評(píng)論