2014-10-17 12 views
5

In che modo il testo può essere "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" che eccede la larghezza del marchio? Ho provato a racchiudere il testo in tag html ma senza fortuna. Si prega di dare i vostri suggerimenti.Come riassumere testo in JLabel?

+0

l'eventuale duplicato non riesce a fornire una soluzione quando la parola non ha alcun carattere spazio in esso. Voglio dire quando c'è una sola parola che supera la larghezza di jlabel, cosa dovrebbe essere fatto in quel caso? – Nadeem

risposta

6

Un approccio comune è quello di non utilizzare uno JLabel e utilizzare invece un JTextArea con il ritorno a capo automatico e il ritorno a capo attivato. Potresti quindi decorare JTextArea per renderlo simile a una JLabel (bordo, colore di sfondo, ecc.). [Modificato per includere la riga per completezza per il commento di DSquare]

Un altro approccio consiste nell'utilizzare l'HTML nell'etichetta, come seen here. Gli avvertimenti ci sono

  1. potrebbe essere necessario prendersi cura di certi personaggi che HTML può interpretare/convertire da testo semplice

  2. Calling myLabel.getText() conterrà ora HTML (con possibilmente fuggiti e/o convertito caratteri a causa di # 1

EDIT: Ecco un esempio per l'approccio JTextArea:

enter image description here

import javax.swing.*; 

public class JLabelLongTextDemo implements Runnable 
{ 
    public static void main(String args[]) 
    { 
    SwingUtilities.invokeLater(new JLabelLongTextDemo()); 
    } 

    public void run() 
    { 
    JLabel label = new JLabel("Hello"); 

    String text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
//  String text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa " + 
//      "quick brown fox jumped over the lazy dog."; 

    JTextArea textArea = new JTextArea(2, 20); 
    textArea.setText(text); 
    textArea.setWrapStyleWord(true); 
    textArea.setLineWrap(true); 
    textArea.setOpaque(false); 
    textArea.setEditable(false); 
    textArea.setFocusable(false); 
    textArea.setBackground(UIManager.getColor("Label.background")); 
    textArea.setFont(UIManager.getFont("Label.font")); 
    textArea.setBorder(UIManager.getBorder("Label.border")); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(label, BorderLayout.NORTH); 
    frame.getContentPane().add(textArea, BorderLayout.CENTER); 
    frame.setSize(100,200); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    } 
} 
+0

In particolare, non desidera un comportamento a capo automatico ma un carattere a caratteri zero. Ciò significa che un JTextArea con 'setLineWrap (true)' ma 'setWrapStyleWord (false)' funzionerebbe. – DSquare

+0

@DSquare: hai ragione riguardo al line-wrap. Tuttavia, l'uso del word-wrap sarebbe anche necessario in modo che tutte le altre parole che non sono più lunghe della lunghezza dell'etichetta (che probabilmente sarebbe la maggior parte di esse) siano ancora avvolte in modo appropriato. Senza di esso, si rompono senza cerimonie e la fine della lunghezza dell'etichetta, che è probabilmente indesiderata (ma non menzionata nel PO). Imposta il word-wrap su false nel mio esempio per vedere cosa intendo. – splungebob

+0

Sono d'accordo sul fatto che il wrap è generalmente auspicabile, ma non è questo il problema qui. Poiché il wrap di parola sovrascrive il comportamento di default del carattere, non è specificamente richiesto da OP. Si prega di impostare 'String text =" aaa ... aaa "' (senza spazi, il caso in questione), e vedere come il codice non risolve il problema. – DSquare