gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:53:37 25 4
gpt4 key购买 nike

所以我有一个基本上用作控制台的 JTextPane。我在 JFrame 的中心字段中有它,在南字段中有一个 JTextFieldJTextField 将获取它拥有的文本,并在用户按下 enter 时将其添加到 JTextPane。为了使用户无法编辑 JTextPane,我必须 setFocusable(false),因为使用 setEditable(false) 会停止来自出现在 JTextPane 上。但是,虽然我不希望用户编辑 Pane ,但我仍然希望用户能够突出显示 Pane 中的文本,但我似乎找不到执行此操作的方法。

下面是一个演示我的意思的例子

示例

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();
}
}

在此先感谢您的帮助。

最佳答案

using setEditable(false) stopped any text from appearing on the JTextPane.

您可以使 JTextPane 不可编辑,但不能通过文本 Pane 更新文本。

相反,您可以通过 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); }

关于java - 如何使用 setFocusable(false) 突出显示 JTextPane 中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39781800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com