转到功能建议先看界面实现中的转到窗口实现JAVA记事本界面实现_云边守望者的博客-CSDN博客,便于对窗口与功能的实现有个整体的印象。下述方法只适用于不自动换行的情况,因为需要文本以换行符分隔每一行,而开启自动换行后似乎文本不以换行符分隔行。
int row = jtext.getLineCount();// 确定文本区域的行数
String str[] = jtext.getText().split("\n");//按换行符分隔
int count = 0;
try {
count = Integer.parseInt(field.getText().trim());
//trim:去头尾空白字符 parseInt:字符转数字
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "请输入要转到的行数!");
}
if (count <= row) {//待转到行数在总行数范围内
int sum = 0;
for (int i = 0; i < count - 1; i++) {
sum += str[i].length() + 1;//统计第count行行首在文本中的总偏移量
}
jtext.setCaretPosition(sum);//设置光标位置
} else {
JOptionPane.showMessageDialog(null, "行数超过了总行数!");
}
gotoDialog.dispose();//关闭转到窗口
Integer的详解点此链接Java Integer类详解 (biancheng.net)
与撤销相关操作
UndoManager undom = new UndoManager();// 创建撤销管理器
UndoableEditListener undoHandler=new UndoHandler();
//jtext为文本区域JTextArea
jtext.getDocument().addUndoableEditListener(undoHandler);// 为文本注册监听器
jtext.getDocument().addDocumentListener(MyNotepad.this);
//实现DocumentListener接口中的方法(与撤销操作有关),文档发生变化时就能触发DocumentEvent事件
public void removeUpdate(DocumentEvent e)//文档被移除
{ edit_undo.setEnabled(true);
}
public void insertUpdate(DocumentEvent e)//文档被插入
{ edit_undo.setEnabled(true);
}
public void changedUpdate(DocumentEvent e)//文档被改变
{ edit_undo.setEnabled(true);
}
//实现接口UndoableEditListener的类UndoHandler(与撤销操作有关)
class UndoHandler implements UndoableEditListener
{ public void undoableEditHappened(UndoableEditEvent uee)
{ undom.addEdit(uee.getEdit());
}
}
撤销功能实现
if(undom.canUndo())
undom.undo();
else
edit_undo.setEnabled(false);