所以我有一个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] 删除。
我来说两句