上移一行:
/** * 上移一行 */ 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; //如果当前行是最后一行,则return if(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; //如果选中行的最后一行是文本域的最后一行,则return if(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); } } } }