2009-06-15 94 views
24

是否可以启用从JLabel中选择文本?如果不是,那么最好使用哪种替代控件,以及如何将其配置为像JLabel一样?从JLabel中选择文本?

回答

1

JLabels不可编辑。

但是,您可以使用JTextField并只更改前景/背景颜色以使其显示为JLabel。如果你想成为真正的幻想,你可以添加代码来改变颜色,当它被选中时表示它是可编辑的。

13

您可以使用一个JTextField而不启用编辑

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

皮埃尔

6

使用的JTextField,你也将要删除边框: f.setBorder(null);

,并设置禁用文本颜色:f.setDisabledTextColor(Color.black);

10

建立在答案上: 您可以使用一个JTextField而不启用编辑

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 

我不知道如何从“跳楼”停止文本,当你选择它,或替换文字(编程)。也许这只是我的电脑...

+0

f.setCaretPosition(0)应避免选择 – 2011-12-15 05:42:16

+0

@fredsmith`setCaretPosition(0)`没有阻止在我的测试中 “跳” '跳' 的文字。这确实:`f.setMinimumSize(new Dimension((int)f.getPreferredSize()。getWidth()+ 1,(int)f.getPreferredSize()。getHeight()));` – 2014-06-02 16:59:40

25

JTextField不允许HTML格式的文本,如JLabel。如果你想选择的HTML文本,你可以尝试或者一个JTextPane中设置为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 
3

如下CopyableLabel变种支持HTML标签和字体作为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); 
    } 
}