2009-06-15 16 views
24

Czy można włączyć zaznaczanie tekstu z JLabel? Jeśli nie, jaka jest najlepsza alternatywna kontrola do użycia i jak można ją skonfigurować tak, aby wyglądała jak JLabel?Wybór tekstu z JLabel?

Odpowiedz

1

JLabels nie można edytować.

Można jednak użyć JTextField i po prostu zmienić kolory pierwszego planu/tła, aby wyglądał jak JLabel. Jeśli chcesz być naprawdę ciekawy, możesz dodać kod, aby zmienić kolory, gdy jest zaznaczony, aby wskazać, że można go edytować.

13

Można użyć JTextField bez umożliwiający edycję

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

Pierre

6

Podczas korzystania JTextField, można również usunąć granicę: f.setBorder(null);

i ustawić wyłączoną kolor tekstu : f.setDisabledTextColor(Color.black);

10

W oparciu o odpowiedzi: Można użyć JTextField bez umożliwiający edycję

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 

nie wiem jak zatrzymać tekst z „skoki”, kiedy go wybrać, czy zastąpić tekst (programowo). Może to tylko mój komputer ...

+0

f.setCaretPosition (0) powinny unikać 'skoki' tekst na wybór –

+0

@fredsmith 'setCaretPosition (0)' nie dopuścić do "skok" w moich testów. To zrobiło: 'f.setMinimumSize (new Dimension ((int) f.getPreferredSize(). GetWidth() + 1, (int) f.getPreferredSize(). GetHeight()));' –

+0

To nie wygląda jak html jest włączona dla tej implementacji –

25

JTextField nie pozwala na tekst w formacie HTML, jak JLabel. Jeśli chcesz selekcyjny Tekst HTML można alternatywnie spróbować JTextPane zestaw do formatowania 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

Ten post ma przydatną sugestię, aby dopasować czcionkę do tego, co normalnie byłoby pokazywane na JLabel: https://explodingpixels.wordpress.com/2008/10/28/make-jeditorpane-use-the -system-font/ –

+0

Możemy również użyć 'setOpaque (false);' zamiast 'setBackground (null);' – user12458

+0

To jest również świetne, ponieważ gdy już się do tego przyzwyczaisz, pozwala ci dodać dodatkowe style do tekstu. Nie podoba mi się tylko to, że nie używa już zwykłej czcionki Swing. –

3

Jako wariant poniżej CopyableLabel obsługuje tagi HTML i czcionek jak 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); 
    } 
}