سؤال

هل يعرف أحد التعليمات البرمجية الموجودة التي تتيح لك رسم نص مبرر بالكامل في Java2D؟

مثلا لو قلت drawString("sample text here", x, y, width), ، هل توجد مكتبة موجودة يمكنها معرفة مقدار النص الذي يتناسب مع العرض، وإجراء بعض التباعد بين الأحرف لجعل النص يبدو جيدًا، والقيام تلقائيًا بالتفاف الكلمات الأساسي؟

هل كانت مفيدة؟

المحلول

على الرغم من أنه ليس الحل الأكثر أناقة أو قوة، إليك الطريقة التي ستستغرق Font من التيار Graphics الكائن والحصول عليه FontMetrics لمعرفة مكان رسم النص، وإذا لزم الأمر، انتقل إلى سطر جديد:

public void drawString(Graphics g, String s, int x, int y, int width)
{
    // FontMetrics gives us information about the width,
    // height, etc. of the current Graphics object's Font.
    FontMetrics fm = g.getFontMetrics();

    int lineHeight = fm.getHeight();

    int curX = x;
    int curY = y;

    String[] words = s.split(" ");

    for (String word : words)
    {
        // Find out thw width of the word.
        int wordWidth = fm.stringWidth(word + " ");

        // If text exceeds the width, then move to next line.
        if (curX + wordWidth >= x + width)
        {
            curY += lineHeight;
            curX = x;
        }

        g.drawString(word, curX, curY);

        // Move over to the right for next word.
        curX += wordWidth;
    }
}

سيؤدي هذا التنفيذ إلى فصل المعطى String في مجموعة من String باستخدام split طريقة تحتوي على حرف مسافة باعتباره فاصل الكلمات الوحيد، لذلك ربما لا تكون قوية جدًا.ويفترض أيضًا أن الكلمة يتبعها حرف مسافة وتتصرف وفقًا لذلك عند تحريك الحرف curX موضع.

لا أوصي باستخدام هذا التنفيذ لو كنت مكانك، ولكن ربما ستظل الوظائف المطلوبة لإجراء تطبيق آخر تستخدم الأساليب التي يوفرها FontMetrics فصل.

نصائح أخرى

لكلمة التفاف، قد تكون مهتمة حسب العنوان <لأ href = "https://stackoverflow.com/questions/239537/how-to-output-a-string-on-multiple-lines-using-graphics" = "كيفية إخراج سلسلة على خطوط متعددة باستخدام الرسومات"> كيفية إخراج سلسلة على خطوط متعددة باستخدام الرسومات . لا مبرر هنا، ولست متأكدا إذا كان من السهل (أو مستحيل!) لإضافة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top