使用文本组件
官方API:https://docs.oracle.com/javase/tutorial/uiswing/components/textapi.html
本节提供使用Swing文本组件时可能需要的背景信息。如果您打算使用无样式的文本组件 - 文本字段,密码字段,格式化文本字段或文本区域 - 请转到其操作方法页面,并仅在必要时返回此处。
Swing文本组件显示文本,并可选择允许用户编辑文本。程序需要用于任务的文本组件,范围从简单(输入单词并按Enter)到复杂(显示和编辑带有亚洲语言嵌入图像的样式文本)。
Swing提供了六个文本组件,以及支持类和接口,甚至可以满足最复杂的文本要求。尽管它们的用途和功能各不相同,但所有Swing文本组件都继承自同一个超类 JTextComponent
,它为文本操作提供了高度可配置和强大的基础。
下图显示了JTextComponent
层次结构。
下表详细介绍了您可以对每种文本组件执行的操作。
组 | 描述 | Swing Classes |
---|---|---|
文字控件 | 简称为文本字段,文本控件只能显示一行可编辑文本。像按钮一样,它们会生成动作事件。使用它们从用户处获取少量文本信息,并在文本输入完成后执行操作。 | JTextField 及其子类JPasswordField 和JFormattedTextField |
纯文本区域 | JTextArea 可以显示多行可编辑文本。尽管文本区域可以以任何字体显示文本,但所有文本都使用相同的字体。使用文本区域允许用户输入任何长度的无格式文本或显示未格式化的帮助信息。 | JTextArea |
样式文本区域 | 样式化文本组件可以使用多种字体显示可编辑文本。一些样式化的文本组件允许嵌入图像甚至嵌入式组件。样式化文本组件是强大的多面组件,适合高端需求,并提供比其他文本组件更多的自定义途径。因为它们非常强大和灵活,所以样式化的文本组件通常需要更多的初始编程来设置和使用。一个例外是编辑器窗格可以轻松地从URL加载格式化文本,这使它们可用于显示不可编辑的帮助信息。 | JEditorPane 及其子类 JTextPane |
Text Component API
本节列出了由文本组件共享的API的常用部分。这个API的大部分都是由JTextComponent
类定义的 。文本组件功能讨论了如何使用此API的一些功能。
JComponent类描述了文本组件继承的API JComponent
。有关与特定文本组件相关的API的信息,请参阅该组件的操作方法页面:文本字段,密码字段,格式化文本字段,文本区域或编辑器窗格和文本窗格。
有关文本API的完整详细信息,请参阅文本包中JTextComponent
各种类和接口 的API文档 。
设置属性
方法 | 描述 |
---|---|
void setEditable(boolean) boolean isEditable() | 设置或指示用户是否可以编辑文本组件中的文本。 |
void setDragEnabled(boolean) boolean getDragEnabled() | 设置或获取dragEnabled 属性,该属性必须为true才能在此组件上启用拖动处理。默认值为false。有关详细信息,请参阅 拖放和数据传输。 |
void setDisabledTextColor(Color) Color getDisabledTextColor() | 设置或获取用于在禁用文本组件时显示文本的颜色。 |
void setMargin(Insets) Insets getMargin() | 设置或获取文本和文本组件边框之间的边距。 |
操作选择
方法 | 描述 |
---|---|
String getSelectedText() | 获取当前选定的文本。 |
void selectAll() void select(int,int) | 选择所有文本或选择开始和结束范围内的文本。 |
void setSelectionStart(int) void setSelectionEnd(int) int getSelectionStart() int getSelectionEnd() | 按索引设置或获取当前选择的范围。 |
void setSelectedTextColor(Color) Color getSelectedTextColor() | 设置或获取所选文本的颜色。 |
void setSelectionColor(Color) Color getSelectionColor() | 设置或获取所选文本的背景颜色。 |
转换模型和视图之间的位置
方法 | 描述 |
---|---|
int viewToModel(Point) | 将视图坐标系中的指定点转换为文本中的位置。 |
Rectangle modelToView(int) | 将文本中的指定位置转换为视图坐标系中的矩形。 |
文本编辑命令
类或方法 | 描述 |
---|---|
void cut() void copy() void paste() void replaceSelection(String) (in JTextComponent) | 使用系统剪贴板剪切,复制和粘贴文本,或者分别用参数指定的字符串替换所选文本。 |
EditorKit | 提供文本组件的视图工厂,文档,插入符和操作,以及读取和写入特定格式的文档。 |
DefaultEditorKit | 其具体子类EditorKit 提供基本的文本编辑功能。 |
StyledEditorKit | 其子类Default EditorKit 为样式文本提供了额外的编辑功能。 |
String xxxx Action (in DefaultEditorKit) | 默认编辑器工具包支持的所有操作的名称。请参阅将文本操作与菜单和按钮关联。 |
BeepAction CopyAction CutAction DefaultKeyTypedAction InsertBreakAction InsertContentAction InsertTabAction PasteAction (in DefaultEditorKit) | 实现各种文本编辑命令的内部类。 |
AlignmentAction BoldAction FontFamilyAction FontSizeAction ForegroundAction ItalicAction StyledTextAction UnderlineAction (in StyledEditorKit) | 为样式化文本实现各种编辑命令的内部类。 |
[Action] getActions() (in JTextComponent) | 获取此组件支持的操作。如果组件使用了一个操作,则此方法从编辑器工具包中获取操作数组。 |
InputMap getInputMap() (in JComponent) | 获取将键击绑定到操作的输入映射。请参阅将文本操作与键描边关联。 |
void put(KeyStroke,Object) (in InputMap) | 将指定的键绑定到指定的操作。您通常按名称指定操作,标准编辑操作由字符串常量表示,例如DefaultEditorKit.backwardAction 。 |
表示文档的类和接口
口或类 | 描述 |
---|---|
Document | 定义必须由所有文档实现的API的接口。 |
AbstractDocument | Document 接口的抽象超类实现。这是Swing文本包提供的所有文档的超类。 |
PlainDocument | 实现Document 接口的类。这是纯文本组件(文本字段,密码字段和文本区域)的默认文档。此外,在加载纯文本或未知格式的文本时,编辑器窗格和文本窗格使用此类。 |
StyledDocument | 一个Document 子接口。定义必须由支持样式文本的文档实现的API。JTextPane 要求其文件属于此类型。 |
DefaultStyledDocument | 实现StyledDocument 接口的类。的默认文件JTextPane 。 |
使用文档
类或方法 | 描述 |
---|---|
DocumentFilter | 所有文档过滤器的超类。您可以使用文档过滤器来更改从文档中插入或删除的内容,而无需自己实现文档。请参阅实现文档过滤器。 |
void setDocumentFilter(DocumentFilter) (in AbstractDocument) | 设置文档过滤器。 |
void setDocument(Document) Document getDocument() (in JTextComponent) | 设置或获取文本组件的文档。 |
Document createDefaultModel() (in JTextField) | 创建默认的PlainDocument模型。重写此方法以创建自定义文档而不是默认文档PlainDocument 。 |
void addDocumentListener(DocumentListener) void removeDocumentListener(DocumentListener) (in Document) | 添加或删除文档侦听器。请参阅侦听文档的更改。 |
void addUndoableEditListener(UndoableEditListener) void removeUndoableEditListener(UndoableEditlistener) (in Document) | 添加或删除可撤消的编辑侦听器。实现撤消和重做时使用了可撤消的编辑侦听器。 |
int getLength() Position getStartPosition() Position getEndPosition() String getText(int,int) (in Document) | Document 返回有关文档的各种描述性信息的方法。 |
Object getProperty(Object) void putProperty(Object,Object) (in Document) void setDocumentProperties(Dictionary) Dictionary getDocumentProperties() (in AbstractDocument) | A Document 维护一组可以使用这些方法操作的属性。 |
操纵插图和选择荧光笔
接口,类或方法 | 描述 |
---|---|
Caret | 一个接口,用于为表示文档中插入点的对象定义API。 |
DefaultCaret | 所有文本组件使用的默认插入符号。 |
void setCaret(Caret) Caret getCaret() | 设置或获取文本组件使用的插入符对象。 |
void setCaretColor(Color) Color getCaretColor() | 设置或获取插入符号的颜色。 |
void setCaretPosition(int) void moveCaretPosition(int) int getCaretPosition() | 设置或获取文档中插入符号的当前位置。 |
void addCaretListener(CaretListener) void removeCaretListener(CaretListener) | 从文本组件添加或删除插入侦听器。 |
NavigationFilter | 所有导航过滤器的超类。导航过滤器允许您修改即将发生的文本组件的插入符更改。 |
void setNavigationFilter(NavigationFilter) | 将导航过滤器附加到文本组件。 |
Highlighter | 一个接口,用于定义用于突出显示当前选择的对象的API。 |
DefaultHighlighter | 所有文本组件使用的默认突出显示器。 |
void setHighlighter(Highlighter) Highlighter getHighlighter() | 设置或获取文本组件使用的突出显示器。 |
阅读和写作文本
方法 | 描述 |
---|---|
void read(Reader,Object) void write(Writer) (in JTextComponent) | 读取或写入文本。 |
void read(Reader,Document,int) void read(InputStream,Document,int) (in EditorKit) | 将文本从流中读取到文档中。 |
void write(Writer,Document,int,int) void write(OutputStream,Document,int,int) (in EditorKit) | 将文本中的文本写入流。 |
实例
实例1-设置属性
/**
* 使用文本组件——设置属性
*/
package 使用文本组件;
import java.awt.Color;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class SetPropertyDemo {
private static void setProperty() {
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setLocation(300, 300);
frame.setLayout(null);
// 创建一个文本框
JTextField textField = new JTextField(50);
// 设置组件的大小和位置
textField.setBounds(50, 50, 200, 30);
// 设置文本框中的文本
textField.setText("请输入文字");
// 设置用户不可以编辑文本组件中的文本
textField.setEditable(false);
// 返回用户是否可以编辑文本组件中的文本
boolean ie = textField.isEditable();
System.out.println("用户是否可以编辑文本组件中的文本:" + ie);
// 设置组件dragEnabled属性,该属性必须为true才能在此组件上启用拖动处理。
textField.setDragEnabled(true);
// 返回用户的dragEnabled属性
boolean de = textField.getDragEnabled();
System.out.println("用户的dragEnabled属性:" + de);
// 设置用于在禁用文本组件时显示文本的颜色
textField.setEnabled(false);// 设置文本组件禁止使用
textField.setDisabledTextColor(Color.blue);
// 返回用户禁用文本组件时文本显示的颜色
Color c = textField.getDisabledTextColor();
System.out.println("用户禁用文本组件时显示文本的颜色是:" + c);
// 设置文本和文本组件框直接的边距
Insets ins = new Insets(5, 10, 5, 1);
textField.setMargin(ins);
// 获取文本和文本组件边框之间的边距
Insets is = textField.getMargin();
System.out.println("文本和文本框之间的边距:" + is.toString());
// 将组件添加到主窗口
frame.add(textField);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
setProperty();
}
}
实例2-操作选择
/**
* 操作选择
*/
package 使用文本组件;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class SetChooseTextDemo {
private static void setChooseText() {
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setLocation(300, 300);
frame.setLayout(null);
// 创建一个文本框
JTextField textField = new JTextField(50);
// 设置组件的大小和位置
textField.setBounds(50, 50, 200, 30);
//设置文本框中的文本
textField.setText("请输入文本");
//获取当前选定的文本
String str=textField.getSelectedText();
System.out.println("当前选定的文本是:"+str);
//设置所选文本的颜色
textField.setSelectedTextColor(Color.RED);
//返回所选文本的颜色
Color color=textField.getSelectedTextColor();
System.out.println("所选文本的颜色是:"+color.toString());
//设置所选文本的背景颜色
textField.setSelectionColor(Color.YELLOW);
//返回所选文本的背景颜色
Color color2=textField.getSelectionColor();
System.out.println("所选文本的背景颜色是:"+color2.toString());
//添加组件到主窗口
frame.add(textField);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
setChooseText();
}
}