2012-06-14 24 views
5

Çok satırlı bir JLabel için en hızlı çözümün aşağıdaki gibi olduğuna inanamıyorum (metin bir değişkenden geliyor ve HTML kodunu el ile koymak istemiyorum) her x karakter, onun kadar çirkin):Çok satırlı bir JLabel (veya tamamen aynı görünen bir JTextArea) nasıl elde edilir

public class JMultilineLabel extends JTextArea{ 
    private static final long serialVersionUID = 1L; 
    public JMultilineLabel(String text){ 
     super(text); 
     setEditable(false); 
     setCursor(null); 
     setOpaque(false); 
     setFocusable(false); 
     setFont(UIManager.getFont("Label.font"));  
     setWrapStyleWord(true); 
     setLineWrap(true); 
    } 
} 

... emin bu işlemek için daha iyi bir yolu değil ????

+0

Neden olur "JTextArea" öğesini düzenlenemez olarak ayarladığınızda, bu şekilde "JTabelField" yerine tam anlamıyla bir şey elde edersiniz. nt düzenlenebilir olmak :) ya da belki bir multiline 'JLabel' sonra? – Boro

+0

Vay üzgünüm, JLabel sorrrryy'yi değiştirdiğimi söylemek istedim, ne düşünüyordum? – Whimusical

+0

Ama bunun için herhangi bir cevap varsa tekrar bakmalıyım, bu yüzden belki de önerilen sonuçlara uymadığı için yinelenen (açıkçası) şüphelerim – Whimusical

cevap

3

Çok satırlı bir etiket istiyorsanız, kullanımında destekledikleri için metinde yalnızca HTML kullanın. Bu nedenle, satırları kesmek veya <p></p> paragraf etiketlerine ayrı çizgiler koymak için hat fren etiketini </br> kullanın.

JLabel için HTML kodunu <html> etiketi ile başlatacağınızı belirtmeyi unutmayın. this veya this kontrol JLabel kullanımı hakkında diğer ilgili sorular vardı ve en azından birkaç olsaydı BTW

More available here.

Ben bakmayı unuttum. :)


DÜZENLEME: Çalışma örnek için

, bir stil ve kullanılabilir alanı alarak Paragraf ve etiket kullanımı ile ayarlamadan, farklı bir yaklaşım göstererek, aşağıya bakın:

import java.awt.BorderLayout; 
import java.awt.Color; 
import javax.swing.*; 

public class LabelHTMLAutoResize { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       JPanel p = new JPanel(new BorderLayout()); 
       JLabel l = new JLabel("<html><p> Some verrrry long text Some verrrry long Some verrrry long text dsa ads oiosi o</p>"); 
       l.setVerticalAlignment(SwingConstants.TOP); 
       l.setOpaque(true); 
       l.setBackground(Color.green); 
       p.add(l); 
       f.setContentPane(p); 
       /* good practice is to use f.pack(); and let the size be automatically calculated but we want to show line wrapping thus frame size is set */ 
       f.setSize(200, 200); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
3

Otomatik olarak şeritleme yapmayı ve gelen dizeyi ayrıştırmamaya ve <BR> her x karakterine ihtiyacım var

Gövde genişliğini (HTML’nin) ayarlayın. Swing HTML desteği temel stilleri içerir.

Bazı SO yerde ortalıkta bir JLabel genişliğini sınırlamak için CSS kullanarak örneklerini ..


Aah evet there it is vardı:

import javax.swing.*; 

class FixedWidthLabel { 

    public static void main(String[] srgs) { 
     String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus."; 
     String html1 = "<html><body style='width: "; 
     String html2 = "px'>"; 

     JOptionPane.showMessageDialog(null, new JLabel(html1+"200"+html2+s)); 
     JOptionPane.showMessageDialog(null, new JLabel(html1+"300"+html2+s)); 
    } 
} 

+0

Ayrıca (kötülük) '
'önlemek istiyorsanız, düzenleme konusuna da bakın. –

+0

+1 nice one Metin boyutunu nasıl sınırlandıracağını merak ediyordum. Bir süre sonra farklı bir yaklaşım seçtim (** EDIT ** 'de). – Boro

+0

@Boro * "Bir süre sonra farklı bir yaklaşım seçtim" * Bu yaklaşımı bir araç ucunda test ettiniz mi? –

İlgili konular