从JLabel中选择文本?

时间:2009-06-15 19:34:45

标签: java swing

是否可以从JLabel中选择文本?如果没有,那么最好的替代控件是什么,以及它如何配置为像JLabel一样?

7 个答案:

答案 0 :(得分:28)

JTextField不允许像JLabel这样的html格式的文本。如果你想要可选择的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

答案 1 :(得分:14)

您可以在不启用编辑的情况下使用JTextField

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

皮尔

答案 2 :(得分: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

我不知道如何在选择文本时将文本从“跳转”中停止,或者替换文本(以编程方式)。也许这只是我的电脑......

答案 3 :(得分:7)

使用JTextField时,您还需要删除边框: f.setBorder(null);

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

答案 4 :(得分:3)

如下面的变体,CopyableLabel支持html标签和Fonts作为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);
    }
}

答案 5 :(得分:1)

JLabels无法编辑。

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

答案 6 :(得分:0)

除了在其他响应中建议的更改之外(em>(setEditable,setContentType,setOpaque或setBackground,可能是setEnabled + setDisabledTextColor(Color.black),可能是setBorder(null)和/或setMargin(new Insets(0,0,0 ,0))

要使JTextPane的字体看起来像JLabel,请参见this blog post的建议:

  

“不幸的是,仅在JEditorPane上调用set字体是无效的,因为默认字体是从样式表(而不是JComponent)中拉出的。但是,有一种巧妙的方法可以解决错误字体的默认问题。更改HTML呈现JEditorPane中的默认字体,是这样更改样式表:“

    // create a JEditorPane that renders HTML and defaults to the system font.
    JEditorPane editorPane = 
            new JEditorPane(new HTMLEditorKit().getContentType(),text);
    // set the text of the JEditorPane to the given text.
    editorPane.setText(text);

    // add a CSS rule to force body tags to use the default label font
    // instead of the value in javax.swing.text.html.default.csss
    Font font = UIManager.getFont("Label.font");
    String bodyRule = "body { font-family: " + font.getFamily() + "; " +
            "font-size: " + font.getSize() + "pt; }";
    ((HTMLDocument)editorPane.getDocument()).getStyleSheet().addRule(bodyRule);