2012-06-14 5 views
5

Non credo che la soluzione più veloce per una JLabel multilinea sia la seguente (il testo proviene da una var, quindi non voglio inserire manualmente il codice HTML) ogni x caratteri, la sua così brutto):Come ottenere una JLabel multilinea (o una JTextArea che sembra totalmente uguale) senza HTML

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

... certo si mangia un modo migliore per gestire questo ????

+0

Perché sarebbe hai impostato 'JTextArea' su non modificabile, in questo modo otterresti qualcosa di più equivalente a' JLabel' piuttosto che 'JTextField' quale intero poi nt dev'essere modificabile :) o forse sei effettivamente dopo una 'JLabel' multilinea? – Boro

+0

Mi dispiace, volevo dire che JLabel sorrrryy ho cambiato, cosa stavo pensando? – Whimusical

+0

Ma so che dovrei cercare di nuovo se c'è qualche risposta per questo, quindi forse è duplicato in quanto i risultati suggeriti non si adattavano (ovviamente) ai miei dubbi – Whimusical

risposta

3

Se si desidera un'etichetta multilinea, è sufficiente utilizzare HTML nel testo, poiché ne supportano l'utilizzo. Pertanto, utilizzare l'etichetta del freno di linea </br> per interrompere le linee o inserire righe separate nei tag di paragrafo <p></p>.

Non dimenticare di contrassegnare che si desidera utilizzare HTML per un JLabel avviando il suo testo con il tag <html>.

More available here.

BTW Ho dimenticato di controllare se ci fossero altre questioni correlate circa JLabel uso e ci sono stati almeno un paio, controllare this o this. :)


EDIT:

Per un esempio di lavoro, mostrando un approccio diverso, senza impostare uno stile e con l'uso di paragrafo e l'etichetta di prendere lo spazio disponibile, si prega di vedere di seguito:

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

Ho bisogno di fare automaticamente il linewrapping e di non dover analizzare la stringa in entrata e mettere un <BR> ogni x caratteri

Imposta la larghezza del corpo (dell'HTML). Il supporto HTML di Swing include stili di base.

ho avuto alcuni esempi di utilizzo di CSS per limitare la larghezza di una JLabel in giro da qualche parte .. SO


Aah sì, there it is:

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

Vedere anche la modifica se si desidera evitare (il male) '
'. –

+0

+1 nice mi stavo chiedendo come limitare la dimensione del testo. Dopo un po 'ho scelto un approccio diverso (presentato nel mio ** EDIT **). – Boro

+0

@Boro * "Dopo un po 'ho scelto un approccio diverso" * Hai testato questo approccio in un suggerimento? –

Problemi correlati