亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

效果

代碼

    /**
     * @return void
     * @Author xia
     * @Description //TODO 寫字換行算法
     * @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)); // 獲取每個字符的寬度
                count++;
            } else {
                // 畫 除了最后一行的前幾行
                String substring = subWords.substring(0, count);
                g2d.drawString(substring, wordsX, wordsY + (b * height));
                subWords = subWords.substring(count);
                b++;
                width = 0;
                count = 0;
            }
            // 畫 最后一行字符串
            if (i == total - 1) {
                g2d.drawString(subWords, wordsX, wordsY + (b * height));
            }
        }
    }

調(diào)用

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

知識補(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 個字符,則需要將剩余字符居中
                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 = "時空相分離調(diào)控的職務(wù)細(xì)胞信號轉(zhuǎn)導(dǎo)";
        drawMyString(graphics, lectureName);

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

相關(guān)文章

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

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

    本篇文章主要介紹了Spring boot實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    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, 這是一個C++編寫的類加載器,是java應(yīng)用體系中最頂層的類加載器,需要的朋友可以參考下
    2023-09-09
  • Spring中的自動裝配機(jī)制詳解

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

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

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

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

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

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

    基于SpringAop中JoinPoint對象的使用說明

    這篇文章主要介紹了基于SpringAop中JoinPoint對象的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    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文件時的嵌套異常SAXParseException問題

    解析XML文件時的嵌套異常SAXParseException問題

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

最新評論