📄 rtextareaeditorkit.java
字号:
}
/*****************************************************************************/
/**
* 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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -