سؤال

لدي Jlabel الذي يحتوي على الكثير من النصوص عليه. هل هناك طريقة لجعل jlabel لها عرض أقصى بحيث سوف يلف النص لجعله لا يتجاوز هذا العرض؟

شكرًا

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

المحلول

لا.

يمكنك استخدام HTML في التسمية، ولكن بعد ذلك يجب عليك التعويض الصعب علامة كسر.

النهج الأفضل هو استخدام jtextarea وتحويل التفاف. يمكنك تغيير الخلفية والدمير والخط وما إلى ذلك من النص هو جعلها تبدو وكأنها تسمية.

ملاحظة، هذه الإجابة قديمة اعتبارا من Java 7 على الأقل.

حسب إجابة @ دارين، تحتاج ببساطة إلى التفاف السلسلة <html> و </html> العلامات:

myLabel.setText("<html>"+ myString +"</html>");

لا تحتاج إلى صعد أي علامات كسر. يلتف النص ككون مكون يتغير.

نصائح أخرى

نعم، هناك طريقتان مشابهتان (أولا مع نمط CSS = "العرض: ... PX"، الثاني مع عرض HTML = .......:

1.

labelText = String.format("<html><div style=\"width:%dpx;\">%s</div></html>", width, text);

2.

labelText = String.format("<html><div WIDTH=%d>%s</div></html>", width, text);

أو ببساطة استخدام

myLabel.setText("<html>"+ myString +"</html>");

jxlabel في مشروع Swingx يدعم التفاف

JXLabel label = new JXLabel(somelongtext);
label.setLineWrap(true);  

يمكنك استخدام HTML دون علامات كسر الترميز الثابت إذا كنت تستخدم علامات الفقرة بدلا من ذلك.

JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>");

هناك تقنية جيدة هنا, ، انتقل إلى نهاية المقال.

JLabel labelBeingUsed = myLabel;
View view = (View) labelBeingUsed.getClientProperty(BasicHTML.propertyKey);
view.setSize(scrollPane1.getWidth(), 0.0f);
float w = view.getPreferredSpan(View.X_AXIS);
float h = view.getPreferredSpan(View.Y_AXIS);
labelBeingUsed.setSize((int) w, (int) h);

بخلاف التفاف النص في <html> علامات، يجب عليك أيضا وضع الملصق في حاوية تحترم الارتفاع المفضل ويعيد العرض إلى الحد الأقصى. على سبيل المثال، يمكنك وضع التسمية في الشمال من BorderLayout.

فيما يلي برنامج عمل بسيط ولكنه كامل لتوضيح هذا. يمكنك تغيير حجم الإطار بأي طريقة تريدها؛ سوف تشغل الملصق العرض بأكمله وسيقوم الارتفاع بضبط وفقا لذلك لفه النص. لاحظ أن كل ما أقوم به هو استخدام <html> العلامات ووضع الملصق في شمال BorderLayout.

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Dimension;

public class LabelWrap {

    public static JPanel createPanel() {
        JLabel label = new JLabel();
        label.setText("<html>"
            + "<h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h3>"
            + "<p>Duis a tincidunt urna. Phasellus tristique interdum mauris, "
            + "ut vestibulum purus suscipit eget. Aenean massa elit, accumsan "
            + "non faucibus vel, dictum placerat urna. In bibendum est sagittis "
            + "urna iaculis quis sagittis velit commodo. Cum sociis natoque "
            + "penatibus et magnis dis parturient montes, nascetur ridiculus "
            + "mus. Nam quis lacus mauris. Phasellus sem libero, convallis "
            + "mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper "
            + "adipiscing. In ac neque quis elit suscipit pharetra. Nulla at "
            + "orci a tortor consequat consequat vitae sit amet elit. Praesent "
            + "commodo lacus a magna mattis vehicula. Curabitur a hendrerit "
            + "risus. Aliquam accumsan lorem quis orci lobortis malesuada.</p>"
            + "<p>Proin quis viverra ligula. Donec pulvinar, dui id facilisis "
            + "vulputate, purus justo laoreet augue, a feugiat sapien dolor ut "
            + "nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit. "
            + "Praesent et mauris non tellus gravida mollis. In hac habitasse "
            + "platea dictumst. Vestibulum ante ipsum primis in faucibus orci "
            + "luctus et ultrices posuere cubilia Curae; Vestibulum mattis, "
            + "tortor sed scelerisque laoreet, tellus neque consectetur lacus, "
            + "eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum "
            + "interdum gravida, elit velit malesuada arcu, nec aliquam lectus "
            + "velit ut turpis. Praesent pretium magna in nibh hendrerit et "
            + "elementum tellus viverra. Praesent eu ante diam. Proin risus "
            + "eros, dapibus at eleifend sit amet, blandit eget purus. "
            + "Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor "
            + "congue.</p>"
            + "</html>");

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(label, BorderLayout.NORTH);
        panel.setPreferredSize(new Dimension(640, 480));
        return panel;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() { 
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setContentPane(createPanel());
                frame.pack();
                frame.setVisible(true);
            }

        });
    }

}

إذا كنت ترغب فقط في استخدام Jlabel مما يمكنك تجربة هذا النهج،

ما عليك سوى عرض عدد الأحرف التي تريد عرضها على التسمية باستخدام طريقة Substring.

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top