अधिकतम चौड़ाई निर्धारित करके एक JLabel रैप को टेक्स्ट बनाएं


82

मेरे पास एक जेलेब है जिस पर बहुत सारा पाठ है। क्या जेलेबेल बनाने की एक विधि अधिकतम चौड़ाई है ताकि वह पाठ को लपेटे ताकि वह इस चौड़ाई से अधिक न हो?

धन्यवाद


जवाबों:


57

नहीं।

आप लेबल में HTML का उपयोग कर सकते हैं, लेकिन फिर आपको ब्रेक टैग को हार्ड कोड करना होगा।

एक बेहतर तरीका यह है कि JTextArea का उपयोग करें और रैपिंग चालू करें। आप पाठ की पृष्ठभूमि, अग्रभूमि, फ़ॉन्ट आदि को बदल सकते हैं, इसे लेबल की तरह बना सकते हैं।

ध्यान दें, यह उत्तर कम से कम जावा 7 के रूप में पुराना है।

प्रति @ डैरेन के जवाब के रूप में, आप बस के साथ स्ट्रिंग रैप करने के लिए की जरूरत है <html>और </html>टैग:

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

आपको किसी भी ब्रेक टैग को हार्ड-कोड करने की आवश्यकता नहीं है। घटक आकार के अनुसार पाठ लपेटता है।


14
यह पूरी तरह सच नहीं है। यदि HTML का उपयोग करते हुए आप ब्रेक टैग को हार्ड कोड कर सकते हैं , लेकिन यदि आप HTML का उपयोग करते हैं और अधिकतम आकार असाइन करते हैं, तो पाठ स्वचालित रूप से लपेटा जाएगा।
डैनियल रिकोव्स्की

2
यदि आप हार्ड कोड ब्रेक टैग का निर्णय लेते हैं, तो सुनिश्चित करें कि आप <br> का उपयोग करते हैं और <br /> का नहीं, क्योंकि जावा 5 बाद वाले को पसंद नहीं करता है।
क्रेगो

मुझे दूसरा विचार पसंद है क्योंकि पहला शब्द एक शब्द को आधा तक तोड़ सकता है और जो मुझे चाहिए वह है शब्द लपेटना
शायर

"आप लेबल में HTML का उपयोग कर सकते हैं, लेकिन फिर आपको ब्रेक टैग को हार्ड कोड करना होगा।" ये गलत है। सीएसएस एक पसंदीदा चौड़ाई निर्दिष्ट कर सकता है, फिर स्ट्रिंग शब्द पर लपेटेगी, स्वचालित रूप से आवश्यकतानुसार कई पंक्तियों में।
एंड्रयू थॉम्पसन

45

हाँ, दो समान तरीके हैं (पहले सीएसएस शैली = "चौड़ाई: ... px", दूसरा HTML WIDTH = .......: के साथ)

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);

5
टेक्स्ट रैप बनाने के लिए html का उपयोग करने के बारे में पूरी बात एक हैक की तरह महसूस होती है, लेकिन यह काम करने का सबसे आसान तरीका है। डिव में आकार सेट करना ठीक वैसा ही है जैसा कि मुझे बिना किसी थर्ड पार्टी लाइब्रेरी या ओवरली-कॉम्प्लेक्स हैक्स के अधिकतम चौड़ाई के साथ जेलेबेल रैप बनाने की आवश्यकता थी।
बजे पीटर डॉल्बर्ग

6
अगर खिड़की का आकार बदल जाए तो क्या होगा? नई लेबल चौड़ाई के अनुसार पाठ को फिर से लिखना होगा, लेकिन इस समाधान के साथ आपको इसे फिर से सेट करना होगा।
एंड्री चेर्नेंको

1
</html>btw :)
Jiří

36

या बस का उपयोग करें

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

JDK 7 के साथ यह पर्याप्त था, धन्यवाद! JLabel lblTitle = new JLabel("<html>My very very very long title text</html>");
मैथ्यू

4
यदि आप ऐसा करते हैं, तो आपको यह सुनिश्चित करना चाहिए कि कोई भी HTML संस्था myStringपहले बच गई है। यदि myString"वैल्यू <5" जैसा कुछ है तो यह "वैल्यू 5" के रूप में दिखाई देगा।
रंगी कीन

13

यदि आप इसके बजाय अनुच्छेद टैग का उपयोग करते हैं, तो आप हार्ड कोडिंग ब्रेक टैग के बिना HTML का उपयोग कर सकते हैं।

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

किसी कारण से यह मेरे लिए काम नहीं किया। एक शीर्षक के बाद पी-टैग, और पाठ लिपटे नहीं है। मेरे पास क्षैतिज स्क्रॉलिंग अक्षम है इसलिए शायद इसके साथ कुछ करना है।
ब्रैम वेनरो

आपको पी टैग की आवश्यकता नहीं है।
एरिक रॉबर्टसन


7

यहां एक अच्छी तकनीक है , लेख के अंत तक स्क्रॉल करें।

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);

7

पाठ को <html>टैग में लपेटने के अलावा , आपको लेबल को एक कंटेनर में रखना होगा जो पसंदीदा ऊंचाई का सम्मान करता है और चौड़ाई को अधिकतम सेट करता है। उदाहरण के लिए, आप लेबल को एक के NORTH में रख सकते हैंBorderLayout

यहाँ यह वर्णन करने के लिए एक सरल लेकिन पूर्ण कार्य कार्यक्रम है। आप किसी भी तरह से फ्रेम का आकार बदल सकते हैं; लेबल पूरी चौड़ाई पर कब्जा कर लेगा और पाठ को लपेटने के लिए ऊंचाई तदनुसार समायोजित हो जाएगी। ध्यान दें कि मैं जो कुछ भी कर रहा हूं वह <html>टैग का उपयोग कर रहा है और लेबल को NORTH में डाल रहा है 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);
            }

        });
    }

}

0

<html>रैपिंग काम करता है लेकिन सभी मामलों में नहीं। यदि मूल कंटेनर FlowLayout का उपयोग करता है तो यह काम नहीं करेगा। इसलिए मैंने इसे BoxLayout में सेट किया। इस कोड स्निपेट को देखें:

javax.swing.JPanel pRefundNote = new javax.swing.JPanel(); 
javax.swing.JLabel lbNote = new javax.swing.JLabel();

pRefundNote.setAlignmentX(0.0F); 
pRefundNote.setMaximumSize(new java.awt.Dimension(32767, 33)); 
pRefundNote.setLayout(new javax.swing.BoxLayout(pRefundNote, javax.swing.BoxLayout.X_AXIS)); 

lbNote.setText("<html>Select items using Shift or Ctrl and Up/Down keys or Mouse</html>"); 
lbNote.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lbNote.setVerticalTextPosition(javax.swing.SwingConstants.TOP); 
pRefundNote.add(lbNote);

न जोड़ें <br>क्योंकि यह आपके पाठ को तोड़ देगा भले ही आप अपने मूल फ्रेम और pRefundNote कंटेनर को बड़ा करें।


-7

यदि आप केवल JLabel का उपयोग करना चाहते हैं, तो आप इस दृष्टिकोण की कोशिश कर सकते हैं,

केवल उन वर्णों की संख्या प्रदर्शित करें जिन्हें आप लेबलिंग विधि का उपयोग करके लेबल पर प्रदर्शित करना चाहते हैं।

public void setLabel(String label){
    String dispLabel=label.substring(0, numOfCharacter);
    labelComponent.setText(dispLabel);
}

यह टेक्स्ट रैपिंग नहीं है।
SapuSeven 12
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.