Выделение текста из JLabel? - PullRequest
28 голосов
/ 15 июня 2009

Можно ли включить выделение текста из JLabel? Если нет, какой лучший альтернативный элемент управления использовать и как его можно настроить так, чтобы он выглядел как JLabel?

Ответы [ 7 ]

29 голосов
/ 03 декабря 2012

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
14 голосов
/ 15 июня 2009

Вы можете использовать JTextField без включения редактирования

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

Pierre

10 голосов
/ 27 марта 2011

Опираясь на ответы: Вы можете использовать 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

Я не знаю, как остановить текст «Прыжки», когда вы выделите его, или заменить текст (программно). Может быть, это только мой компьютер ...

7 голосов
/ 15 июня 2009

При использовании JTextField вы также захотите удалить границу: f.setBorder(null);

и установите отключенный цвет текста: f.setDisabledTextColor(Color.black);

3 голосов
/ 09 апреля 2015

Как вариант ниже, 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);
    }
}
1 голос
/ 15 июня 2009

JLabels нельзя редактировать.

Однако вы можете использовать JTextField и просто изменить цвета переднего плана / фона, чтобы он выглядел как JLabel. Если вы хотите быть по-настоящему модным, вы можете добавить код, чтобы изменить цвета, когда он выбран, чтобы указать, что он доступен для редактирования.

0 голосов
/ 28 ноября 2018

Помимо изменений, предложенных в других ответах (setEditable, setContentType, setOpaque или setBackground, возможно, setEnabled + setDisabledTextColor (Color.black), может быть, setBorder (null) и / или setMargin (новые вставки (0,0,0) , 0))

Чтобы шрифт JTextPane выглядел как JLabel, см. Предложение из этого сообщения в блоге :

"К сожалению, простой вызов set font на JEditorPane не будет иметь никакого эффекта, так как шрифт по умолчанию извлекается из таблицы стилей, а не из 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...