javax.swing.text.Caret#getMark ( )源码实例Demo

下面列出了javax.swing.text.Caret#getMark ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: netbeans   文件: BaseCaret.java
/**
 * Determines if the following are true:
 * <ul>
 * <li>the press event is located over a selection
 * <li>the dragEnabled property is true
 * <li>A TranferHandler is installed
 * </ul>
 * <p>
 * This is implemented to check for a TransferHandler.
 * Subclasses should perform the remaining conditions.
 */
protected boolean isDragPossible(MouseEvent e) {
    JComponent comp = getEventComponent(e);
    boolean possible =  (comp == null) ? false : (comp.getTransferHandler() != null);
    if (possible) {
        JTextComponent c = (JTextComponent) getEventComponent(e);
        if (c.getDragEnabled()) {
            Caret caret = c.getCaret();
            int dot = caret.getDot();
            int mark = caret.getMark();
            if (dot != mark) {
                Point p = new Point(e.getX(), e.getY());
                int pos = c.viewToModel(p);

                int p0 = Math.min(dot, mark);
                int p1 = Math.max(dot, mark);
                if ((pos >= p0) && (pos < p1)) {
                    return true;
                }
            }
        }
    }
    return false;
}
 
源代码2 项目: netbeans   文件: SelectCodeElementAction.java
private int computeSelIndex(boolean inner) {
    Caret caret = target.getCaret();
    if (selectionInfos != null && caret != null && caret.getDot() != caret.getMark()) {
        int dot = caret.getDot();
        int mark = caret.getMark();
        int start = Math.min(dot,mark);
        //int end = Math.max(dot,mark);
        for (int i = 0; i < selectionInfos.length; i++) {
            if (selectionInfos[i].getStartOffset() == start) {
                // TODO - check end offset too
                return i;
            }
        }
        // No exact match - look at the editor selection and find the range
        // that most closely surround the selection (if inner is true, go
        // for the inner one, otherwise the outer)
        for (int i = selectionInfos.length-2; i >= 0; i--) {
            if (selectionInfos[i].getStartOffset() > start &&
                    selectionInfos[i+1].getStartOffset() < start) {
                return inner ? i : i-1;
            }
        }
    }
    
    return selIndex;
}
 
源代码3 项目: java-swing-tips   文件: MainPanel.java
private void fire(Object c) {
  if (c instanceof JTextComponent) {
    JTextComponent tc = (JTextComponent) c;
    Caret caret = tc.getCaret();
    int d = caret.getDot();
    int m = caret.getMark();
    // LOGGER.info(() -> String.format("%s / %s", m, d));
    if (d != m && (dot != d || mark != m)) {
      Optional.ofNullable(tc.getSelectedText()).ifPresent(str -> {
        LOGGER.info(() -> str);
        // StringSelection data = new StringSelection(str);
        // Toolkit.getDefaultToolkit().getSystemClipboard().setContents(data, data);
        tc.copy();
      });
    }
    dot = d;
    mark = m;
  }
}
 
源代码4 项目: java-swing-tips   文件: MainPanel.java
@Override public void actionPerformed(ActionEvent e) {
  JTextComponent target = getTextComponent(e);
  if (Objects.nonNull(target) && target.isEditable()) {
    Caret caret = target.getCaret();
    int dot = caret.getDot();
    int mark = caret.getMark();
    if (DefaultEditorKit.deletePrevCharAction.equals(getValue(Action.NAME))) {
      // @see javax/swing/text/DefaultEditorKit.java DeletePrevCharAction
      if (dot == 0 && mark == 0) {
        return;
      }
    } else {
      // @see javax/swing/text/DefaultEditorKit.java DeleteNextCharAction
      Document doc = target.getDocument();
      if (dot == mark && doc.getLength() == dot) {
        return;
      }
    }
  }
  deleteAction.actionPerformed(e);
}
 
源代码5 项目: openAGV   文件: DeleteAction.java
/**
 * This method was copied from
 * DefaultEditorKit.DeleteNextCharAction.actionPerformed(ActionEvent).
 *
 * @param e
 */
public void deleteNextChar(ActionEvent e) {
  JTextComponent c = getTextComponent(e);
  boolean beep = true;

  if ((c != null) && (c.isEditable())) {
    try {
      javax.swing.text.Document doc = c.getDocument();
      Caret caret = c.getCaret();
      int dot = caret.getDot();
      int mark = caret.getMark();

      if (dot != mark) {
        doc.remove(Math.min(dot, mark), Math.abs(dot - mark));
        beep = false;
      }
      else if (dot < doc.getLength()) {
        doc.remove(dot, 1);
        beep = false;
      }
    }
    catch (BadLocationException bl) {
    }
  }

  if (beep) {
    Toolkit.getDefaultToolkit().beep();
  }
}
 
源代码6 项目: ghidra   文件: TextFieldLinker.java
@Override
public void keyPressed(KeyEvent e) {
	Caret caret = linked.field.getCaret();
	boolean sel = caret.getMark() != caret.getDot();
	switch (e.getKeyCode()) {
		case KeyEvent.VK_BACK_SPACE:
			if (!sel && state.isAfterSep(linked.index)) {
				state.removeSep(linked.index - 1);
				e.consume();
			}
			break;
		case KeyEvent.VK_CLEAR:
			clear();
			break;
		case KeyEvent.VK_DELETE:
			if (!sel && state.isBeforeSep(linked.index)) {
				state.removeSep(linked.index);
				e.consume();
			}
			break;
		case KeyEvent.VK_KP_LEFT:
		case KeyEvent.VK_LEFT:
			if (state.isAfterSep(linked.index)) {
				state.navigateFieldLeft(linked.index - 1);
			}
			break;
		case KeyEvent.VK_KP_RIGHT:
		case KeyEvent.VK_RIGHT:
			if (state.isBeforeSep(linked.index)) {
				state.navigateFieldRight(linked.index + 1);
			}
			break;
		default:
			return;
	}
	syncStateLater();
}
 
源代码7 项目: netbeans   文件: EditorCaret.java
/**
    * Determines if the following are true:
    * <ul>
    * <li>the press event is located over a selection
    * <li>the dragEnabled property is true
    * <li>A TranferHandler is installed
    * </ul>
    * <p>
    * This is implemented to check for a TransferHandler.
    * Subclasses should perform the remaining conditions.
    */
   private boolean isDragPossible(MouseEvent e) {
Object src = e.getSource();
if (src instanceof JComponent) {
    JComponent comp = (JComponent) src;
           boolean possible =  (comp == null) ? false : (comp.getTransferHandler() != null);
           if (possible && comp instanceof JTextComponent) {
               JTextComponent c = (JTextComponent) comp;
               if (c.getDragEnabled()) {
                   Caret caret = c.getCaret();
                   int dot = caret.getDot();
                   int mark = caret.getMark();
                   if (dot != mark) {
                       Point p = new Point(e.getX(), e.getY());
                       int pos = c.viewToModel(p);

                       int p0 = Math.min(dot, mark);
                       int p1 = Math.max(dot, mark);
                       if ((pos >= p0) && (pos < p1)) {
                           return true;
                       }
                   }
               }
           }
       }
       return false;
   }
 
源代码8 项目: netbeans   文件: BreadCrumbsScheduler.java
@Override
protected SchedulerEvent createSchedulerEvent (SourceModificationEvent event) {
    final JTextComponent ce = currentEditor;
    final Caret caret = ce != null ? ce.getCaret() : null;
    final Source s = getSource();
    if (event.getModifiedSource() == s && caret != null) {
        return new CursorMovedSchedulerEvent(this, caret.getDot(), caret.getMark()) { };
    }
    return null;
}
 
源代码9 项目: netbeans   文件: DocumentationScrollPane.java
private void copy() {
    Caret caret = view.getCaret();
    if (caret.getDot() != caret.getMark()) {
        view.copy();
    } else {
        editorComponent.copy();
    }
}
 
源代码10 项目: netbeans   文件: CursorSensitiveScheduler.java
@Override
protected SchedulerEvent createSchedulerEvent (SourceModificationEvent event) {
    final JTextComponent ce = currentEditor;
    final Caret caret = ce != null ? ce.getCaret() : null;
    final Source s = getSource();
    if (event.getModifiedSource() == s && caret != null) {
        return new CursorMovedSchedulerEvent(this, caret.getDot(), caret.getMark()) { };
    }
    return null;
}
 
源代码11 项目: netbeans   文件: GlyphGutter.java
public @Override void mouseDragged(MouseEvent e) {
    EditorUI eui = editorUI;
    if (eui == null) {
        return;
    }
    JTextComponent component = eui.getComponent();
    BaseTextUI textUI = (BaseTextUI)component.getUI();
    AbstractDocument aDoc = (AbstractDocument)component.getDocument();
    aDoc.readLock();
    try {
        // The drag must be extended to a next line in order to perform any selection
        int lineStartOffset = textUI.getPosFromY(e.getY());
        boolean updateDragEndOffset = false;
        if (dragStartOffset == -1) { // Drag starts now
            dragStartOffset = lineStartOffset;
            dragEndOffset = lineStartOffset;
        } else if (dragStartOffset == dragEndOffset) {
            if (lineStartOffset != dragStartOffset) {
                updateDragEndOffset = true;
            }
        } else {
            updateDragEndOffset = true;
        }
        if (updateDragEndOffset) {
            // Extend selection to active line's end or begining depending on dragStartOffset
            Caret caret = component.getCaret();
            if (lineStartOffset >= dragStartOffset) {
                if (caret.getMark() != dragStartOffset) {
                    caret.setDot(dragStartOffset);
                }
                // Check if the sele
                // Extend to next line's begining
                dragEndOffset = Math.min(Utilities.getRowEnd((BaseDocument) aDoc, lineStartOffset) + 1, aDoc.getLength());
            } else { // Backward selection
                // Check if the selection is already reverted i.e. it starts at dragStartOffset's line end
                if (caret.getMark() == dragStartOffset) {
                    caret.setDot(Utilities.getRowEnd((BaseDocument)aDoc, dragStartOffset) + 1);
                }
                dragEndOffset = lineStartOffset;
            }
            component.moveCaretPosition(dragEndOffset);
        }
    } catch (BadLocationException ble) {
        // Ignore rather than notify
    } finally {
        aDoc.readUnlock();
    }
}
 
源代码12 项目: netbeans   文件: BaseAction.java
/** Update the component according to the given update mask
* @param target target component to be updated.
* @param updateMask mask that specifies what will be updated
*/
public void updateComponent(JTextComponent target, int updateMask) {
    if (target != null && target.getDocument() instanceof BaseDocument) {
        BaseDocument doc = (BaseDocument)target.getDocument();
        boolean writeLocked = false;

        try {
            // remove selected text
            if ((updateMask & SELECTION_REMOVE) != 0) {
                writeLocked = true;
                doc.extWriteLock();
                Caret caret = target.getCaret();
                if (caret != null && Utilities.isSelectionShowing(caret)) {
                    int dot = caret.getDot();
                    int markPos = caret.getMark();
                    if (dot < markPos) { // swap positions
                        int tmpPos = dot;
                        dot = markPos;
                        markPos = tmpPos;
                    }
                    try {
                        target.getDocument().remove(markPos, dot - markPos);
                    } catch (BadLocationException e) {
                        Utilities.annotateLoggable(e);
                    }
                }
            }

            // reset magic caret position
            if ((updateMask & MAGIC_POSITION_RESET) != 0) {
                if (target.getCaret() != null)
                    target.getCaret().setMagicCaretPosition(null);
            }

            // reset merging of undoable edits
            if ((updateMask & UNDO_MERGE_RESET) != 0) {
                doc.resetUndoMerge();
            }

            // reset word matching
            if ((updateMask & WORD_MATCH_RESET) != 0) {
                ((BaseTextUI)target.getUI()).getEditorUI().getWordMatch().clear();
            }

            // Clear status bar text
            if (!recording && (updateMask & CLEAR_STATUS_TEXT) != 0) {
                Utilities.clearStatusText(target);
            }

            // Save current caret position in the jump-list
            if ((updateMask & SAVE_POSITION) != 0) {
                JumpList.checkAddEntry(target);
            }

        } finally {
            if (writeLocked) {
                doc.extWriteUnlock();
            }
        }
    }
}
 
源代码13 项目: netbeans   文件: EditorFindSupport.java
boolean replaceImpl(Map<String, Object> props, boolean oppositeDir, JTextComponent c) throws BadLocationException {
    props = getValidFindProperties(props);
    boolean back = Boolean.TRUE.equals(props.get(FIND_BACKWARD_SEARCH));
    if (oppositeDir) {
        back = !back;
    }
    boolean blockSearch = Boolean.TRUE.equals(props.get(FIND_BLOCK_SEARCH));
    Position blockSearchStartPos = (Position) props.get(FIND_BLOCK_SEARCH_START);
    int blockSearchStartOffset = (blockSearchStartPos != null) ? blockSearchStartPos.getOffset() : -1;

    if (c != null) {
        String s = (String)props.get(FIND_REPLACE_WITH);
        Caret caret = c.getCaret();
        if (caret.isSelectionVisible() && caret.getDot() != caret.getMark()){
            Object dp = props.get(FIND_BACKWARD_SEARCH);
            boolean direction = (dp != null) ? ((Boolean)dp).booleanValue() : false;
            int dotPos = (oppositeDir ^ direction ? c.getSelectionEnd() : c.getSelectionStart());
            c.setCaretPosition(dotPos);
        }
        
        FindReplaceResult result = findReplaceImpl(s, props, oppositeDir, c);
        if (result!=null){
            s  = result.getReplacedString();
        } else {
            return false;
        }

        Document doc = c.getDocument();
        int startOffset = c.getSelectionStart();
        int len = c.getSelectionEnd() - startOffset;
        DocUtils.atomicLock(doc);
        try {
            if (len > 0) {
                doc.remove(startOffset, len);
            }
            if (s != null && s.length() > 0) {
                try {
                    NavigationHistory.getEdits().markWaypoint(c, startOffset, false, true);
                } catch (BadLocationException e) {
                    LOG.log(Level.WARNING, "Can't add position to the history of edits.", e); //NOI18N
                }
                doc.insertString(startOffset, s, null);
                if (startOffset == blockSearchStartOffset) { // Replaced at begining of block
                    blockSearchStartPos = doc.createPosition(startOffset);
                    props.put(EditorFindSupport.FIND_BLOCK_SEARCH_START, blockSearchStartPos);
                }
            }
        } finally {
            DocUtils.atomicUnlock(doc);
            if (blockSearch){
                setBlockSearchHighlight(blockSearchStartOffset, getBlockEndOffset());
            }
        }
        
        // adjust caret pos after replace operation
        int adjustedCaretPos = (back || s == null) ? startOffset : startOffset + s.length();
        caret.setDot(adjustedCaretPos);
        
    }
    
    return true;
}
 
源代码14 项目: netbeans   文件: MasterMatcher.java
private static void navigateAreas(
    int [] origin, 
    int [] matches,
    int caretOffset,
    Object caretBias,
    Caret caret,
    boolean select
) {
    if (matches != null && matches.length >= 2) {
        int newDotBackwardIdx = -1;
        int newDotForwardIdx = -1;
        
        for(int i = 0; i < matches.length / 2; i++) {
            if (matches[i * 2] <= origin[0] && 
                (newDotBackwardIdx == -1 || matches[i * 2] > matches[newDotBackwardIdx * 2])
            ) {
                newDotBackwardIdx = i;
            }
            
            if (matches[i * 2] >= origin[1] && 
                (newDotForwardIdx == -1 || matches[i * 2] < matches[newDotForwardIdx * 2])
            ) {
                newDotForwardIdx = i;
            }
        }
        
        if (newDotBackwardIdx != -1) {
            if (select) {
                int set, move;
                
                if (caretOffset < origin[1]) {
                    set = origin[0];
                    move = matches[2 * newDotBackwardIdx + 1];
                } else {
                    set = origin[1];
                    move = matches[2 * newDotBackwardIdx];
                }

                if (caret.getDot() == caret.getMark()) { // || (move <= caret.getMark() && caret.getMark() <= set)
                    caret.setDot(set);
                }
                caret.moveDot(move);
            } else {
                if (B_BACKWARD.equalsIgnoreCase(caretBias.toString())) {
                    caret.setDot(matches[2 * newDotBackwardIdx + 1]);
                } else {
                    caret.setDot(matches[2 * newDotBackwardIdx]);
                }
            }
        } else if (newDotForwardIdx != -1) {
            if (select) {
                int set, move;

                if (caretOffset > origin[0]) {
                    set = origin[1];
                    move = matches[2 * newDotForwardIdx];
                } else {
                    set = origin[0];
                    move = matches[2 * newDotForwardIdx + 1];
                }
                
                if (caret.getDot() == caret.getMark()) { //  || (set <= caret.getMark() && caret.getMark() <= move)
                    caret.setDot(set);
                }
                caret.moveDot(move);
            } else {
                if (B_BACKWARD.equalsIgnoreCase(caretBias.toString())) {
                    caret.setDot(matches[2 * newDotForwardIdx + 1]);
                } else {
                    caret.setDot(matches[2 * newDotForwardIdx]);
                }
            }
        }
    }
}
 
源代码15 项目: netbeans   文件: Utilities.java
/**
 * Check whether caret's selection is visible and there is at least
 * one selected character showing.
 * 
 * @param caret non-null caret.
 * @return true if selection is visible and there is at least one selected character.
 */
public static boolean isSelectionShowing(Caret caret) {
    return caret.isSelectionVisible() && caret.getDot() != caret.getMark();
}