JTextArea 上移一行 下移一行 的 实现
上移一行:
?
/** * 上移一行 */private void moveUp(){//获得选中文本String selection = jTextArea1.getSelectedText();//没有选中文本的场景if (selection == null) {try {//获得当前光标位置int cur = jTextArea1.getCaretPosition();//取得当前行行号 int row = jTextArea1.getLineOfOffset(cur);if(row == 0){return ;//如果当前行是第一行,则return}//取得当前行的起始位置int lineStartOffset = jTextArea1.getLineStartOffset(row);//取得当前行结束位置int lineEndOffset = jTextArea1.getLineEndOffset(row);//取得当前行的内容String lineText = jTextArea1.getText(lineStartOffset, lineEndOffset-lineStartOffset);//取得上一行的起始位置int upLineStartOffset = jTextArea1.getLineStartOffset(row-1);//取得上一行的结束位置int upLineEndOffset = jTextArea1.getLineEndOffset(row-1);//取得上一行的内容String upLineText = jTextArea1.getText(upLineStartOffset, upLineEndOffset-upLineStartOffset);//对于当前行不是以换行符结尾场景的特殊处理if(!lineText.endsWith("\n")){lineText = lineText+"\n";upLineText = upLineText.substring(0, upLineText.length()-1);}//删除当前行内容jTextArea1.replaceRange(null, lineStartOffset, lineEndOffset);//将上一行的内容插入当前行的起始位置jTextArea1.insert(upLineText, lineStartOffset);//删除上一行内容jTextArea1.replaceRange(null, upLineStartOffset, upLineEndOffset);//将当前行的内容插入上一行的起始位置jTextArea1.insert(lineText, upLineStartOffset);//将新上移的行选中,以便于识别。//当前行上移后,新的上一行起始位置不会变化,但是结束位置会发生变化,所以需要重新获取结束位置。jTextArea1.setSelectionStart(upLineStartOffset);//结束位置做减一处理,是为了防止光标所在行与当前选中行不一致(结束位置是换行符)jTextArea1.setSelectionEnd(jTextArea1.getLineEndOffset(row-1)-1);} catch (Exception e) {if("true".equals(ConfigUtil.getConfInfo().get(Const.IS_LOG)+"")){log.error(null, e);}}}else {try {//取得选中行的起始行号int startRow = jTextArea1.getLineOfOffset(jTextArea1.getSelectionStart());if(startRow == 0){return ;}//取得选中行的结束行号int endRow = jTextArea1.getLineOfOffset(jTextArea1.getSelectionEnd());//取得选中行的起始位置int startCur = jTextArea1.getLineStartOffset(startRow);//取得选中行的结束位置int endCur = jTextArea1.getLineEndOffset(endRow);//取得当前选择行的内容String text = jTextArea1.getText(startCur,endCur-startCur);//取得上一行的起始位置int upLineStartOffset = jTextArea1.getLineStartOffset(startRow-1);//取得上一行的结束位置int upLineEndOffset = jTextArea1.getLineEndOffset(startRow-1);//取得上一行的内容String upLineText = jTextArea1.getText(upLineStartOffset, upLineEndOffset-upLineStartOffset);//对于当前所选行不是以换行符结尾场景的特殊处理if(! text.endsWith("\n")){text = text+"\n";upLineText = upLineText.substring(0, upLineText.length()-1);}//删除选中行内容jTextArea1.replaceRange(null, startCur, endCur);//将上一行的内容插入当前行的起始位置jTextArea1.insert(upLineText, startCur);//删除上一行内容jTextArea1.replaceRange(null, upLineStartOffset, upLineEndOffset);//将当前行的内容插入上一行的起始位置jTextArea1.insert(text, upLineStartOffset);//将新上移的行选中,以便于识别。//当前行上移后,新的上一行起始位置不会变化,但是结束位置会发生变化,所以需要重新获取结束位置。jTextArea1.setSelectionStart(upLineStartOffset);//结束位置做减一处理,是为了防止光标所在行与当前选中行不一致(结束位置是换行符)jTextArea1.setSelectionEnd(jTextArea1.getLineEndOffset(endRow-1)-1);} catch (Exception e) {if("true".equals(ConfigUtil.getConfInfo().get(Const.IS_LOG)+"")){log.error(null, e);}}}}?
下移一行:
?
/** * 下移一行 */private void moveDown(){//获得选中文本String selection = jTextArea1.getSelectedText();//没有选中文本的场景if (selection == null) {try {//获得当前光标位置int cur = jTextArea1.getCaretPosition();//取得当前行行号 int row = jTextArea1.getLineOfOffset(cur); //取得最后一行的行号 int endRow = jTextArea1.getLineCount()-1; //如果当前行是最后一行,则returnif(row == endRow){return ;}//取得当前行的起始位置int lineStartOffset = jTextArea1.getLineStartOffset(row);//取得当前行结束位置int lineEndOffset = jTextArea1.getLineEndOffset(row);//取得当前行的内容String lineText = jTextArea1.getText(lineStartOffset, lineEndOffset-lineStartOffset);//取得下一行的起始位置int nextLineStartOffset = jTextArea1.getLineStartOffset(row+1);//取得下一行的结束位置int nextLineEndOffset = jTextArea1.getLineEndOffset(row+1);//取得下一行的内容String nextLineText = jTextArea1.getText(nextLineStartOffset, nextLineEndOffset-nextLineStartOffset);//对于下一行不是以换行符结尾场景的特殊处理boolean isEndN = nextLineText.endsWith("\n");if(!isEndN){nextLineText = nextLineText+"\n";lineText = lineText.substring(0, lineText.length()-1);}//删除下一行内容jTextArea1.replaceRange(null, nextLineStartOffset, nextLineEndOffset);//将当前行的内容插入下一行的起始位置jTextArea1.insert(lineText, nextLineStartOffset);//删除当前行内容jTextArea1.replaceRange(null, lineStartOffset, lineEndOffset);//将下一行的内容插入当前行的起始位置jTextArea1.insert(nextLineText, lineStartOffset);//将新下移的行选中,以便于识别。//当前行下移后,新的下一行起始位置会发生变化,所以需要重新获取结束位置。jTextArea1.setSelectionStart(jTextArea1.getLineStartOffset(row+1));//(下移后结束位置不会发生变化)结束位置做减一处理,是为了防止光标所在行与当前选中行不一致(结束位置是换行符)if(isEndN){jTextArea1.setSelectionEnd(nextLineEndOffset-1);}else{jTextArea1.setSelectionEnd(nextLineEndOffset);}} catch (Exception e) {if("true".equals(ConfigUtil.getConfInfo().get(Const.IS_LOG)+"")){log.error(null, e);}}}else {try {//取得选中行的起始行号int startRow = jTextArea1.getLineOfOffset(jTextArea1.getSelectionStart());//取得选中行的结束行号int endRow = jTextArea1.getLineOfOffset(jTextArea1.getSelectionEnd());//取得最后一行的行号 int lastRow = jTextArea1.getLineCount()-1; //如果选中行的最后一行是文本域的最后一行,则returnif(endRow == lastRow){return ;}//取得选中行的起始位置int startCur = jTextArea1.getLineStartOffset(startRow);//取得选中行的结束位置int endCur = jTextArea1.getLineEndOffset(endRow);//取得当前选择行的内容String text = jTextArea1.getText(startCur,endCur-startCur);//取得下一行的起始位置int nextLineStartOffset = jTextArea1.getLineStartOffset(endRow+1);//取得下一行的结束位置int nextLineEndOffset = jTextArea1.getLineEndOffset(endRow+1);//取得下一行的内容String nextLineText = jTextArea1.getText(nextLineStartOffset, nextLineEndOffset-nextLineStartOffset);//对于下一行不是以换行符结尾场景的特殊处理boolean isEndN = nextLineText.endsWith("\n");if(!isEndN){nextLineText = nextLineText+"\n";text = text.substring(0, text.length()-1);}//删除下一行内容jTextArea1.replaceRange(null, nextLineStartOffset, nextLineEndOffset);//将选中行内容插入下一行的起始位置jTextArea1.insert(text, nextLineStartOffset);//删除选中行内容jTextArea1.replaceRange(null, startCur, endCur);//将下一行的内容插入选中行的起始位置jTextArea1.insert(nextLineText, startCur);//将新下移的行选中,以便于识别。//选中行下移后,起始位置会发生变化,但是结束位置不会发生变化,所以需要重新获取起始位置。jTextArea1.setSelectionStart(jTextArea1.getLineStartOffset(startRow+1));//(下移后结束位置不会发生变化)结束位置做减一处理,是为了防止光标所在行与当前选中行不一致(结束位置是换行符)if(isEndN){jTextArea1.setSelectionEnd(nextLineEndOffset-1);}else{jTextArea1.setSelectionEnd(nextLineEndOffset);}} catch (Exception e) {if("true".equals(ConfigUtil.getConfInfo().get(Const.IS_LOG)+"")){log.error(null, e);}}}}