2009-06-15 11 views
24

È possibile abilitare la selezione del testo da una JLabel? In caso contrario, qual è il miglior controllo alternativo da utilizzare e come può essere configurato per apparire come un JLabel?Selezione del testo da una JLabel?

risposta

1

JLabels non può essere modificato.

Tuttavia, è possibile utilizzare un JTextField e modificare semplicemente i colori di primo piano/sfondo per farlo apparire come una JLabel. Se si desidera essere davvero fantasiosi, è possibile aggiungere codice per cambiare i colori quando viene selezionato per indicare che è modificabile.

13

è possibile utilizzare una JTextField senza abilitare la modifica

JTextField f=new JTextField("Hello World"); 
f.setEditable(false); 
content.add(f); 

Pierre

6

Quando si utilizza JTextField, vorrete anche per rimuovere il bordo: f.setBorder(null);

e impostare il colore del testo disattivato : f.setDisabledTextColor(Color.black);

10

Sulla base delle risposte: È possibile utilizzare un JTextField senza abilitare la modifica

JTextField f=new JTextField("Hello World"); 
f.setEditable(false); 
f.setBackground(null); //this is the same as a JLabel 
f.setBorder(null); //remove the border 

Non so come fermare il testo da "salto" quando si seleziona, o sostituire il testo (di programmazione). Forse è solo il mio computer ...

+0

f.setCaretPosition (0) dovrebbe evitare di 'salto' di testo su selezione –

+0

@fredsmith 'setCaretPosition (0)' non ha impedito il "salto" nel mio test. Questo ha fatto: 'f.setMinimumSize (new Dimension ((int) f.getPreferredSize(). GetWidth() + 1, (int) f.getPreferredSize(). GetHeight()));' –

+0

Non sembra come html è abilitato per questa implementazione –

25

Un JTextField non consente il testo in formato html come una JLabel. Se si desidera che il testo html selezionabile in alternativa, si potrebbe provare un JTextPane impostato per la formattazione HTML:

JTextPane f = new JTextPane(); 
f.setContentType("text/html"); // let the text pane know this is what you want 
f.setText("<html>Hello World</html>"); // showing off 
f.setEditable(false); // as before 
f.setBackground(null); // this is the same as a JLabel 
f.setBorder(null); // remove the border 
+1

Questo post ha un suggerimento utile per far corrispondere il carattere a quello che verrebbe normalmente mostrato su una JLabel: https://explodingpixels.wordpress.com/2008/10/28/make-jeditorpane-use-the -system-font/ –

+0

Possiamo anche usare 'setOpaque (false);' invece di 'setBackground (null);' – user12458

+0

Questo è anche ottimo perché una volta che ci si abitua ad esso, è possibile aggiungere altri stili al testo. L'unica cosa che non mi piace è che non usa più il carattere normale di Swing. –

3

Come variante sotto CopyableLabel supporta i tag html e caratteri come JLabel.

public class CopyableLabel extends JTextPane { 

    private static final long serialVersionUID = -1; 

    private static final Font DEFAULT_FONT; 

    static { 
     Font font = UIManager.getFont("Label.font"); 
     DEFAULT_FONT = (font != null) ? font: new Font("Tahoma", Font.PLAIN, 11); 
    } 

    public CopyableLabel() { 
     construct(); 
    } 

    private void construct() { 
     setContentType("text/html"); 

     setEditable(false); 
     setBackground(null); 
     setBorder(null); 

     putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true); 
     setFont(DEFAULT_FONT); 
    } 
}