📄 rtextareaeditorkit.java~1~
字号:
* Positions the caret at the beginning of the previous word.
*/
public static class PreviousWordAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 8434805513476967733L;
private boolean select;
public PreviousWordAction(String name, boolean select) {
super(name);
this.select = select;
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
int offs = textArea.getCaretPosition();
boolean failed = false;
try {
// FIXME: Replace Utilities call with custom version to
// cut down on all of the modelToViews, as each call causes
// a getTokenList => expensive!
Element curPara = Utilities.getParagraphElement(textArea, offs);
offs = Utilities.getPreviousWord(textArea, offs);
if(offs < curPara.getStartOffset()) {
offs = Utilities.getParagraphElement(textArea, offs).
getEndOffset() - 1;
}
} catch (BadLocationException bl) {
if (offs != 0)
offs = 0;
else
failed = true;
}
if (!failed) {
if (select)
textArea.moveCaretPosition(offs);
else
textArea.setCaretPosition(offs);
}
else
UIManager.getLookAndFeel().provideErrorFeedback(textArea);
}
public final String getMacroID() {
return getName();
}
}
/*****************************************************************************/
/**
* Redoes the last action undone.
*/
public static class RedoAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 8181110767269540020L;
public RedoAction() {
super(rtaRedoAction);
}
public RedoAction(String name, Icon icon, String desc,
Integer mnemonic, KeyStroke accelerator) {
super(name, icon, desc, mnemonic, accelerator);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
if (textArea.isEnabled() && textArea.isEditable()) {
textArea.redoLastAction();
textArea.requestFocusInWindow();
}
}
public final String getMacroID() {
return rtaRedoAction;
}
}
/*****************************************************************************/
/**
* Selects the entire document.
*/
public static class SelectAllAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 8363273591979503169L;
public SelectAllAction() {
super(selectAllAction);
}
public SelectAllAction(String name, Icon icon, String desc,
Integer mnemonic, KeyStroke accelerator) {
super(name, icon, desc, mnemonic, accelerator);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
Document doc = textArea.getDocument();
textArea.setCaretPosition(0);
textArea.moveCaretPosition(doc.getLength());
}
public final String getMacroID() {
return DefaultEditorKit.selectAllAction;
}
}
/*****************************************************************************/
/**
* Selects the line around the caret.
*/
public static class SelectLineAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 8998224209303322396L;
private Action start;
private Action end;
public SelectLineAction() {
super(selectLineAction);
start = new BeginLineAction("pigdog", false);
end = new EndLineAction("pigdog", true);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
start.actionPerformed(e);
end.actionPerformed(e);
}
public final String getMacroID() {
return DefaultEditorKit.selectLineAction;
}
}
/*****************************************************************************/
/**
* Selects the word around the caret.
*/
public static class SelectWordAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 3024077158390341526L;
private Action start;
private Action end;
public SelectWordAction() {
super(selectWordAction);
start = new BeginWordAction("pigdog", false);
end = new EndWordAction("pigdog", true);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
start.actionPerformed(e);
end.actionPerformed(e);
}
public final String getMacroID() {
return DefaultEditorKit.selectWordAction;
}
}
/*****************************************************************************/
/**
* Puts the text area into read-only mode.
*/
public static class SetReadOnlyAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 6754771392405605336L;
public SetReadOnlyAction() {
super(readOnlyAction);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
textArea.setEditable(false);
}
public final String getMacroID() {
return DefaultEditorKit.readOnlyAction;
}
public boolean isRecordable() {
return false; // Why would you want to record this?
}
}
/*****************************************************************************/
/**
* Puts the text area into writable (from read-only) mode.
*/
public static class SetWritableAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = -4865426940626155978L;
public SetWritableAction() {
super(writableAction);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
textArea.setEditable(true);
}
public final String getMacroID() {
return DefaultEditorKit.writableAction;
}
public boolean isRecordable() {
return false; // Why would you want to record this?
}
}
/*****************************************************************************/
/**
* The action for inserting a time/date stamp.
*/
public static class TimeDateAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 8752116956488164415L;
public TimeDateAction() {
super(rtaTimeDateAction);
}
public TimeDateAction(String name, Icon icon, String desc,
Integer mnemonic, KeyStroke accelerator) {
super(name, icon, desc, mnemonic, accelerator);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
if (!textArea.isEditable() || !textArea.isEnabled()) {
UIManager.getLookAndFeel().provideErrorFeedback(textArea);
return;
}
Date today = new Date();
DateFormat timeDateStamp = DateFormat.getDateTimeInstance();
String dateString = timeDateStamp.format(today);
textArea.replaceSelection(dateString);
}
public final String getMacroID() {
return rtaTimeDateAction;
}
}
/*****************************************************************************/
/**
* The action for the insert key toggling insert/overwrite modes.
*/
public static class ToggleTextModeAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = -85164461074413563L;
public ToggleTextModeAction() {
super(rtaToggleTextModeAction);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
int textMode = textArea.getTextMode();
if (textMode==RTextArea.INSERT_MODE)
textArea.setTextMode(RTextArea.OVERWRITE_MODE);
else
textArea.setTextMode(RTextArea.INSERT_MODE);
}
public final String getMacroID() {
return rtaToggleTextModeAction;
}
}
/*****************************************************************************/
/**
* Undoes the last action done.
*/
public static class UndoAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 181295318893452050L;
public UndoAction() {
super(rtaUndoAction);
}
public UndoAction(String name, Icon icon, String desc,
Integer mnemonic, KeyStroke accelerator) {
super(name, icon, desc, mnemonic, accelerator);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
if (textArea.isEnabled() && textArea.isEditable()) {
textArea.undoLastAction();
textArea.requestFocusInWindow();
}
}
public final String getMacroID() {
return rtaUndoAction;
}
}
/*****************************************************************************/
/**
* Removes the selection, if any.
*/
public static class UnselectAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 88130368434047507L;
public UnselectAction() {
super(rtaUnselectAction);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
textArea.setCaretPosition(textArea.getCaretPosition());
}
public final String getMacroID() {
return rtaUnselectAction;
}
}
/*****************************************************************************/
/**
* Action to make the selection upper-case.
*/
public static class UpperSelectionCaseAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 6810298207159878661L;
public UpperSelectionCaseAction() {
super(rtaUpperSelectionCaseAction);
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
if (!textArea.isEditable() || !textArea.isEnabled()) {
UIManager.getLookAndFeel().provideErrorFeedback(textArea);
return;
}
String selection = textArea.getSelectedText();
if (selection!=null)
textArea.replaceSelection(selection.toUpperCase());
textArea.requestFocusInWindow();
}
public final String getMacroID() {
return getName();
}
}
/*****************************************************************************/
/**
* Scrolls up/down vertically. The select version of this action extends
* the selection, instead of simply moving the caret.
*/
public static class VerticalPageAction extends RecordableTextAction {
/**
*
*/
private static final long serialVersionUID = 8056447925883438083L;
private boolean select;
private int direction;
public VerticalPageAction(String name, int direction, boolean select) {
super(name);
this.select = select;
this.direction = direction;
}
public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
Rectangle visible = textArea.getVisibleRect();
Rectangle newVis = new Rectangle(visible);
int selectedIndex = textArea.getCaretPosition();
int scrollAmount = textArea.getScrollableBlockIncrement(
visible, SwingConstants.VERTICAL, direction);
int initialY = visible.y;
Caret caret = textArea.getCaret();
Point magicPosition = caret.getMagicCaretPosition();
int yOffset;
if (selectedIndex!=-1) {
try {
Rectangle dotBounds = textArea.modelToView(selectedIndex);
int x = (magicPosition != null) ? magicPosition.x :
dotBounds.x;
int h = dotBounds.height;
yOffset = direction *
((int)Math.ceil(scrollAmount/(double)h)-1)*h;
newVis.y = constrainY(textArea, initialY+yOffset, yOffset, visible.height);
int newIndex;
if (visible.contains(dotBounds.x, dotBounds.y)) {
// Dot is currently visible, base the new
// location off the old, or
newIndex = textArea.viewToModel(
new Point(x, constrainY(textArea,
dotBounds.y + yOffset, 0, 0)));
}
else {
// Dot isn't visible, choose the top or the bottom
// for the new location.
if (direction == -1) {
newIndex = textArea.viewToModel(new Point(
x, newVis.y));
}
else {
newIndex = textArea.viewToModel(new Point(
x, newVis.y + visible.height));
}
}
newIndex = constrainOffset(textArea, newIndex);
if (newIndex != selectedIndex) {
// Make sure the new visible location contains
// the location of dot, otherwise Caret will
// cause an additional scroll.
adjustScrollIfNecessary(textArea, newVis, initialY,
newIndex);
if (select)
textArea.moveCaretPosition(newIndex);
else
textArea.setCaretPosition(newIndex);
}
} catch (BadLocationException ble) { }
} // End of if (selectedIndex!=-1).
else {
yOffset = direction * scrollAmount;
newVis.y = constrainY(textArea, initialY + yOffset, yOffset, visible.height);
}
if (magicPosition != null)
caret.setMagicCaretPosition(magicPosition);
textArea.scrollRectToVisible(newVis);
}
private int constrainY(JTextComponent textArea, int y, int vis, int screenHeight) {
if (y < 0)
y = 0;
else if (y + vis > textArea.getHeight()) {
//y = Math.max(0, textArea.getHeight() - vis);
y = Math.max(0, textArea.getHeight()-screenHeight);
}
return y;
}
private int constrainOffset(JTextComponent text, int offset) {
Document doc = text.getDocument();
if ((offset != 0) && (offset > doc.getLength()))
offset = doc.getLength();
if (offset < 0)
offset = 0;
return offset;
}
private void adjustScrollIfNecessary(JTextComponent text,
Rectangle visible, int initialY,
int index) {
try {
Rectangle dotBounds = text.modelToView(index);
if (dotBounds.y < visible.y ||
(dotBounds.y > (visible.y + visible.height)) ||
(dotBounds.y + dotBounds.height) >
(visible.y + visible.height)) {
int y;
if (dotBounds.y < visible.y)
y = dotBounds.y;
else
y = dotBounds.y + dotBounds.height - visible.height;
if ((direction == -1 && y < initialY) ||
(direction == 1 && y > initialY))
// Only adjust if won't cause scrolling upward.
visible.y = y;
}
} catch (BadLocationException ble) {}
}
public final String getMacroID() {
return getName();
}
}
/*****************************************************************************/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -