inputhandler.java
来自「java写的多功能文件编辑器」· Java 代码 · 共 1,230 行 · 第 1/3 页
JAVA
1,230 行
private boolean select; public next_line(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int caret = textArea.getCaretPosition(); int line = textArea.getCaretLine(); if(line == textArea.getLineCount() - 1) { textArea.getToolkit().beep(); return; } int magic = textArea.getMagicCaretPosition(); if(magic == -1) { magic = textArea.offsetToX(line, caret - textArea.getLineStartOffset(line)); } caret = textArea.getLineStartOffset(line + 1) + textArea.xToOffset(line + 1,magic + 1); if(select) textArea.select(textArea.getMarkPosition(),caret); else textArea.setCaretPosition(caret); textArea.setMagicCaretPosition(magic); } } public static class next_page implements ActionListener { private boolean select; public next_page(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int lineCount = textArea.getLineCount(); int firstLine = textArea.getFirstLine(); int visibleLines = textArea.getVisibleLines(); int line = textArea.getCaretLine(); firstLine += visibleLines; if(firstLine + visibleLines >= lineCount - 1) firstLine = lineCount - visibleLines; textArea.setFirstLine(firstLine); int caret = textArea.getLineStartOffset( Math.min(textArea.getLineCount() - 1, line + visibleLines)); if(select) textArea.select(textArea.getMarkPosition(),caret); else textArea.setCaretPosition(caret); } } public static class next_word implements ActionListener { private boolean select; public next_word(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int caret = textArea.getCaretPosition(); int line = textArea.getCaretLine(); int lineStart = textArea.getLineStartOffset(line); String lineText = textArea.getLineText(line); int len = lineText.length(); /*boolean skipSpacesAfter = WordMove.isSpaceAfter(), //this one is always == enabled! enabled = WordMove.isEnabled();*/ boolean overSpace = Jext.getBooleanProperty("editor.wordmove.go_over_space"); caret -= lineStart; if(caret == len) { if(lineStart + caret == textArea.getDocumentLength()) { textArea.getToolkit().beep(); return; } caret++; } else { //MODIFIED by Blaisorblade, Paolo Giarrusso //We must always skip spaces before jumping over a word, if the patch is enabled if (overSpace) { while (caret < len && lineText.charAt(caret) == ' ') caret++; } if (caret < len) { String noWordSep = ((JextTextArea) textArea).getProperty("noWordSep"); caret = TextUtilities.findWordEnd(lineText,caret + 1,noWordSep); //MODIFIED if (overSpace) { while (caret < len && lineText.charAt(caret) == ' ') caret++; } } } if(select) textArea.select(textArea.getMarkPosition(), lineStart + caret); else textArea.setCaretPosition(lineStart + caret); } } public static class overwrite implements ActionListener { public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); textArea.setOverwriteEnabled( !textArea.isOverwriteEnabled()); } } public static class prev_char implements ActionListener { private boolean select; public prev_char(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int caret = textArea.getCaretPosition(); if(caret == 0) { textArea.getToolkit().beep(); return; } if(select) textArea.select(textArea.getMarkPosition(), caret - 1); else textArea.setCaretPosition(caret - 1); } } public static class prev_line implements ActionListener { private boolean select; public prev_line(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int caret = textArea.getCaretPosition(); int line = textArea.getCaretLine(); if(line == 0) { textArea.getToolkit().beep(); return; } int magic = textArea.getMagicCaretPosition(); if(magic == -1) { magic = textArea.offsetToX(line, caret - textArea.getLineStartOffset(line)); } caret = textArea.getLineStartOffset(line - 1) + textArea.xToOffset(line - 1,magic + 1); if(select) textArea.select(textArea.getMarkPosition(),caret); else textArea.setCaretPosition(caret); textArea.setMagicCaretPosition(magic); } } public static class prev_page implements ActionListener { private boolean select; public prev_page(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int firstLine = textArea.getFirstLine(); int visibleLines = textArea.getVisibleLines(); int line = textArea.getCaretLine(); if(firstLine < visibleLines) firstLine = visibleLines; textArea.setFirstLine(firstLine - visibleLines); int caret = textArea.getLineStartOffset( Math.max(0,line - visibleLines)); if(select) textArea.select(textArea.getMarkPosition(),caret); else textArea.setCaretPosition(caret); } } public static class prev_word implements ActionListener { private boolean select; public prev_word(boolean select) { this.select = select; } public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); int caret = textArea.getCaretPosition(); int line = textArea.getCaretLine(); int lineStart = textArea.getLineStartOffset(line); String lineText = textArea.getLineText(line); //boolean skipSpacesBefore = WordMove.isSpaceBefore(), //this one is always *FALSE*! //enabled = WordMove.isEnabled(); boolean overSpace = Jext.getBooleanProperty("editor.wordmove.go_over_space"); caret -= lineStart; if(caret == 0) { if(lineStart == 0) { textArea.getToolkit().beep(); return; } caret--; } else { //MODIFIED by Blaisorblade, Paolo Giarrusso //We must always skip spaces before jumping over a word, if the patch is enabled if (overSpace) while (caret > 0 && lineText.charAt(caret - 1) == ' ') caret--; if (caret > 0) { String noWordSep = ((JextTextArea) textArea).getProperty("noWordSep"); caret = TextUtilities.findWordStart(lineText,caret - 1,noWordSep); /*if (skipSpacesBefore) while (caret > 0 && lineText.charAt(caret - 1) == ' ') caret--;*/ } } if(select) textArea.select(textArea.getMarkPosition(), lineStart + caret); else textArea.setCaretPosition(lineStart + caret); } } public static class repeat implements ActionListener, InputHandler.NonRecordable { public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); textArea.getInputHandler().setRepeatEnabled(true); String actionCommand = evt.getActionCommand(); if (actionCommand != null) { textArea.getInputHandler().setRepeatCount(Integer.parseInt(actionCommand)); } } } public static class insert_char implements ActionListener, InputHandler.NonRepeatable { public void actionPerformed(ActionEvent evt) { JEditTextArea textArea = getTextArea(evt); String str = evt.getActionCommand(); int repeatCount = textArea.getInputHandler().getRepeatCount(); if(textArea.isEditable()) { StringBuffer buf = new StringBuffer(); for(int i = 0; i < repeatCount; i++) buf.append(str); textArea.overwriteSetSelectedText(buf.toString()); } else { textArea.getToolkit().beep(); } } }}/* * ChangeLog: * $Log: InputHandler.java,v $ * Revision 1.4 2003/07/08 18:55:50 blaisorblade * Removal of the useless WordMove class. * * Revision 1.3 2002/11/16 18:46:55 blaisorblade * Added caching of the option dialog, and new word moving. * * Revision 1.2 2001/08/26 13:29:42 gfx * Better JavaScript colorizing support * * Revision 1.1.1.1 2001/08/20 22:32:14 gfx * Jext 3.0pre5 * * Revision 1.5 2001/08/12 15:02:04 gfx * Repeat bug fix * * Revision 1.4 2001/08/12 14:36:27 gfx * XTree reloading fix * * Revision 1.3 2001/06/07 00:13:13 gfx * Jext 3.0pre2 <Madcat> * * Revision 1.2 2001/04/17 21:58:29 gfx * * new email adress: romain.guy@jext.org * * Revision 1.1.1.1 2001/04/11 14:22:47 gfx * * Jext 2.11: GUI customization, bug fixes * * Revision 1.22 2000/03/18 05:45:25 sp * Complete word overhaul, various other changes * * Revision 1.21 2000/02/15 07:44:30 sp * bug fixes, doc updates, etc * * Revision 1.20 2000/02/10 08:32:51 sp * Bug fixes, doc updates * * Revision 1.19 2000/01/28 00:20:58 sp * Lots of stuff * * Revision 1.18 2000/01/21 00:35:29 sp * Various updates * * Revision 1.16 1999/12/24 01:20:20 sp * Bug fixing and other stuff for 2.3pre1 * * Revision 1.15 1999/12/19 11:14:29 sp * Static abbrev expansion started * * Revision 1.14 1999/12/13 03:40:30 sp * Bug fixes, syntax is now mostly GPL'd * * Revision 1.13 1999/12/03 23:48:10 sp * C+END/C+HOME, LOADING BufferUpdate message, misc stuff * * Revision 1.12 1999/11/21 07:59:30 sp * JavaDoc updates * * Revision 1.11 1999/11/21 03:40:18 sp * Parts of EditBus not used by core moved to EditBus.jar * * Revision 1.10 1999/11/21 01:20:31 sp * Bug fixes, EditBus updates, fixed some warnings generated by jikes +P * * Revision 1.9 1999/11/19 08:54:52 sp * EditBus integrated into the core, event system gone, bug fixes * * Revision 1.8 1999/11/16 08:21:20 sp * Various fixes, attempt at beefing up expand-abbrev * * Revision 1.7 1999/11/09 10:14:34 sp * Macro code cleanups, menu item and tool bar clicks are recorded now, delete * word commands, check box menu item support * * Revision 1.6 1999/10/24 02:06:41 sp * Miscallaneous pre1 stuff * * Revision 1.5 1999/10/05 10:55:29 sp * File dialogs open faster, and experimental keyboard macros * */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?