2009-06-15 12 views
24

Est-il possible d'activer la sélection de texte à partir d'un JLabel? Si non, quel est le meilleur contrôle alternatif à utiliser, et comment peut-il être configuré pour apparaître comme un JLabel?Sélection du texte d'un JLabel?

Répondre

1

JLabels ne peut pas être éditable.

Cependant, vous pouvez utiliser un JTextField et juste changer les couleurs de premier plan/arrière-plan pour le faire apparaître comme JLabel. Si vous voulez être vraiment chic, vous pouvez ajouter du code pour changer les couleurs quand il est sélectionné pour indiquer qu'il est modifiable.

13

Vous pouvez utiliser un JTextField sans activer l'édition

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

Pierre

6

Lorsque vous utilisez JTextField, vous aussi vouloir supprimer la bordure: f.setBorder(null);

et définir la couleur du texte désactivé : f.setDisabledTextColor(Color.black);

10

sur la base des réponses: Vous pouvez utiliser un JTextField sans activer l'édition

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 

Je ne sais pas comment arrêter le texte de « saut » lorsque vous sélectionnez, ou remplacer le texte (programme). Peut-être qu'il est juste mon ordinateur ...

+0

f.setCaretPosition (0) devrait éviter que le texte 'sauter' sur la sélection –

+0

@fredsmith 'setCaretPosition (0)' n'a pas empêché le "saut" dans mes tests. Cela a fait: 'f.setMinimumSize (nouvelle dimension ((int) f.getPreferredSize() getWidth() + 1, (int) f.getPreferredSize() getHeight())..);' –

+0

Il ne semble pas comme html est activé pour cette implémentation –

25

Un JTextField ne permet pas de texte au format HTML comme un JLabel. Si vous voulez que le texte HTML sélectionné, vous pourriez aussi essayer un JTextPane réglé sur la mise en forme 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

Ce message contient une suggestion utile pour que la police corresponde à ce qui serait normalement affiché sur un JLabel: https://explodingpixels.wordpress.com/2008/10/28/make-jeditorpane-use-the -system-font/ –

+0

Nous pouvons aussi utiliser 'setOpaque (false);' au lieu de 'setBackground (null);' – user12458

+0

C'est aussi génial car une fois que vous y êtes habitué, cela vous permet d'ajouter des styles supplémentaires au texte. La seule chose que je n'aime pas, c'est qu'il n'utilise plus la police normale de Swing. –

3

Comme variante ci-dessous CopyableLabel prend en charge les balises HTML et les polices de caractères comme 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); 
    } 
} 
Questions connexes