这些Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发行说明。
插入点(光标)在文本组件中移动或者文本组件的选中内容发生变化时,会触发插入点事件。例如,文本组件的文档在插入或删除文本时可以触发插入点事件。你可以使用addCaretListener
方法将插入点监听器附加到任何JTextComponent
子类的实例上。
这是来自名为TextComponentDemo
的应用程序的插入符事件处理代码:
... //初始化发生的地方 CaretListenerLabel caretListenerLabel = new CaretListenerLabel("插入符状态"); ... textPane.addCaretListener(caretListenerLabel); ... protected class CaretListenerLabel extends JLabel implements CaretListener { ... //可能不是从事件调度线程调用的。 public void caretUpdate(CaretEvent e) { displaySelectionInfo(e.getDot(), e.getMark()); } //此方法可以从任何线程调用。它会调用setText和modelToView方法,这些方法必须在事件调度线程中运行。我们使用 //invokeLater在事件调度线程中调度代码的执行。 protected void displaySelectionInfo(final int dot, final int mark) { SwingUtilities.invokeLater(new Runnable() { public void run() { if (dot == mark) { // 没有选择 ... } }); } } }
caretUpdate
方法不能保证在事件调度线程中调用。要在caretUpdate
中使用更新GUI的任何方法,需要特殊处理以确保它们在事件调度线程上执行。您可以通过将代码包装在一个Runnable
中,并在该Runnable
上调用SwingUtilities.invokeLater
来实现这一点。
您可以在使用Swing组件的示例索引中找到TextComponentDemo
的源文件链接。有关程序中插入符监听器方面的讨论,请参见监听插入符和选择更改在文本组件功能中。
因为CaretListener
只有一个方法,所以它没有相应的适配器类。
方法 | 目的 |
---|---|
caretUpdate(CaretEvent) | 在被监听组件中插入符移动或选择更改时调用。 |
方法 | 目的 |
---|---|
int getDot() | 返回插入符的当前位置。如果有文本被选中,插入符标记选中的一端。 |
int getMark() | 返回选中的另一端。如果没有选中任何文本,该方法返回的值与getDot 返回的值相等。请注意,插入符不保证小于选中的另一端。 |
Object getSource() (在 java.util.EventObject 中) |
返回触发事件的对象。 |
以下表格列出了使用Caret监听器的示例。
示例 | 描述位置 | 注释 |
---|---|---|
TextComponentDemo |
监听Caret和选择更改 | 使用监听器标签来显示插入符和选择状态。 |