如何使用setFocusable(false)在JTextPane中突出显示文本?

瑞安

所以我有一个JTextPane基本上可以充当控制台的设备。我在a的中央字段JFrame和aJTextField在南的字段中使用它。JTextField将它的文本,并将其添加到JTextPane当用户按下输入。为了使JTextPane用户不可编辑setFocusable(false),因为使用setEditable(false)阻止了任何文本出现在JTextPane但是,尽管我不希望用户编辑窗格,但我仍然希望用户能够突出显示窗格中的文本,但是我似乎找不到解决此问题的方法。

以下是一个示例,说明了我的意思

样本

package resources;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.text.AttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;

public class SampeTextPane extends JFrame
{
    public SampeTextPane()
    {
        setPreferredSize(new Dimension(350, 200));
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JTextPane display = new JTextPane();
        display.setBorder(new EmptyBorder(5, 5, 5, 5));
        display.setMargin(new Insets(5, 5, 5, 5));
        display.setFocusable(false);
        appendToPane(display, "Example", Color.BLUE);

        JTextField field = new JTextField();
        field.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                appendToPane(display, field.getText(), Color.BLACK);
                field.setText("");
            }
        });

        add(display, BorderLayout.CENTER);
        add(field, BorderLayout.SOUTH);

        pack();
        setVisible(true);
    }

    private void appendToPane(JTextPane pane, String text, Color color)
    {
        StyleContext sc = StyleContext.getDefaultStyleContext();
        AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, color);

        aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED);

        int len = pane.getDocument().getLength();
        pane.setCaretPosition(len);
        pane.setCharacterAttributes(aset, false);
        pane.replaceSelection(text + "\n");
    }

    public static void main(String[] args)
    {
        new SampeTextPane();
    }
}

在此先感谢您的帮助。

卡米克尔

使用setEditable(false)阻止任何文本出现在JTextPane上。

您可以将其JTextPane设为不可编辑,但不能通过文本窗格来更新文本。

相反,您可以通过来更新文本Document

//int len = pane.getDocument().getLength();
//pane.setCaretPosition(len);
//pane.setCharacterAttributes(aset, false);
//pane.replaceSelection(text + "\n");

try
{
    StyledDocument doc = pane.getStyledDocument();
    doc.insertString(doc.getLength(), text, aset);
}
catch(BadLocationException e) { System.out.println(e); }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用JavaScript突出显示文本

JTextPane突出显示文本

突出显示JTextPane中的当前行

使用SearchView小部件时如何在RecyclerView中突出显示过滤的文本

如何使用图形突出显示控件中的换行文本?

如何使用输入实时突出显示文本?

如何使用django从文本中的列中突出显示特定单词?

如何使用JavaScript从网页中获取突出显示的文本

如何使用Tkinter突出显示文本小部件中的C ++语法

URL中的`#:〜:text =`如何突出显示文本?

如何完全禁用JTextPane的文本突出显示?

如何在禁用突出显示的其他组件中安排透明JTextPane

如何在Calibre中突出显示文本?

使用正则表达式在JTextPane中突出显示数字

如何取消突出显示JTextPane中的文本

在使用jQuery向表中添加一行后如何阻止文本突出显示

如何突出显示和使用文本框中突出显示的行?

如何在乳胶中突出显示文本

如何将jTextPane中所有突出显示的单词更改为jTextField中给定的单词?

如何将jTextPane中的整个(突出显示的)文本恢复正常?

如何在qpdfview中突出显示文本?

如何在存储库中使用@Highlight注释突出显示Solr Search中的文本

如何使用 Swift 在 WebView 中查找和突出显示文本

如何从 sensenet 中的内容搜索中获取突出显示的文本

如何突出显示文本使用 type.js 文本

如何使用 Javascript 操作突出显示的文本

如何突出显示复杂的 html 中的文本

如何在 Flask 中突出显示文本

如何使用 RegEx 突出显示括号 [] 和如果它包含特定单词或符号中的文本?