下面列出了javax.swing.text.JTextComponent#setSelectionEnd ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void setTextFieldValue(String value, String projectValue, JTextComponent field) {
if (value != null) {
field.setText(value);
component.setToolTipText(null);
inherited = false;
label.setFont(label.getFont().deriveFont(Font.BOLD));
} else if (projectValue != null) {
field.setText(projectValue);
field.setSelectionEnd(projectValue.length());
field.setSelectionStart(0);
// field.setBackground(INHERITED);
label.setFont(label.getFont().deriveFont(Font.PLAIN));
component.setToolTipText(MSG_Value_Inherited());
inherited = true;
} else {
field.setText("");//NOI18N
component.setToolTipText(null);
inherited = false;
label.setFont(label.getFont().deriveFont(Font.BOLD));
}
}
private static void replacePattern(String pattern, JTextComponent area, String replace, boolean select) {
String props = area.getText();
Matcher match = Pattern.compile(pattern, Pattern.DOTALL).matcher(props);
if (match.matches()) {
int begin = props.indexOf(TestChecker.PROP_SKIP_TEST);
props = props.replace(TestChecker.PROP_SKIP_TEST + match.group(1), replace); //NOI18N
area.setText(props);
if (select) {
area.setSelectionStart(begin);
area.setSelectionEnd(begin + replace.length());
area.requestFocusInWindow();
}
} else {
String sep = "\n";//NOI18N
if (props.endsWith("\n") || props.trim().length() == 0) {//NOI18N
sep = "";//NOI18N
}
props = props + sep + replace; //NOI18N
area.setText(props);
if (select) {
area.setSelectionStart(props.length() - replace.length());
area.setSelectionEnd(props.length());
area.requestFocusInWindow();
}
}
}
private void prepareEditor() {
Component c = getEditor().getEditorComponent();
if (c instanceof JTextComponent) {
JTextComponent jtc = (JTextComponent) c;
String s = jtc.getText();
if ((s != null) && (s.length() > 0)) {
jtc.setSelectionStart(0);
jtc.setSelectionEnd(s.length());
}
if (tableUI) {
jtc.setBackground(getBackground());
} else {
jtc.setBackground(PropUtils.getTextFieldBackground());
}
if( tableUI )
jtc.requestFocus();
}
if (getLayout() != null) {
getLayout().layoutContainer(this);
}
repaint();
}
public static void insert(final JTextComponent component, final String string) {
final int start = component.getSelectionStart();
insert(component, start, string);
component.setSelectionStart(start + string.length());
component.setSelectionEnd(start + string.length());
}
/**
* Sets file name as text and selects its name part in any text component.
*
* @param editor text editor to process
* @param file file to process
*/
public static void displayFileName ( @NotNull final JTextComponent editor, @NotNull final File file )
{
final String name = file.getName ();
editor.setText ( name );
editor.setSelectionStart ( 0 );
editor.setSelectionEnd ( file.isDirectory () ? name.length () : FileUtils.getFileNamePart ( name ).length () );
}
void apply(JTextComponent cmp) {
if(!applied && cmp.getDocument().getLength() >= len) {
if(dot == mark) {
cmp.setCaretPosition(dot);
} else {
cmp.setSelectionStart(mark);
cmp.setSelectionEnd(dot);
cmp.getCaret().setSelectionVisible(true);
}
if(focus) cmp.requestFocus();
applied = true;
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (ignoreComboAction)
return; // not invoked by user, ignore
GuardedBlock gBlock = codeData.getGuardedBlock(category, blockIndex);
GuardBlockInfo gInfo = getGuardInfos(category)[blockIndex];
int[] blockBounds = getGuardBlockBounds(category, blockIndex);
int startOffset = blockBounds[0];
int endOffset = blockBounds[1];
int gHead = gBlock.getHeaderLength();
int gFoot = gBlock.getFooterLength();
JTextComponent editor = getEditor(category);
StyledDocument doc = (StyledDocument) editor.getDocument();
changed = true;
JComboBox combo = (JComboBox) e.getSource();
try {
docListener.setActive(false);
if (combo.getSelectedIndex() == 1) { // changing from default to custom
NbDocument.unmarkGuarded(doc, startOffset, endOffset - startOffset);
// keep last '\n' so we don't destroy next editable block's position
doc.remove(startOffset, endOffset - startOffset - 1);
// insert the custom code into the document
String customCode = gBlock.getCustomCode();
int customLength = customCode.length();
if (gInfo.customizedCode != null) { // already was edited before
customCode = customCode.substring(0, gHead)
+ gInfo.customizedCode
+ customCode.substring(customLength - gFoot);
customLength = customCode.length();
}
if (customCode.endsWith("\n")) // NOI18N
customCode = customCode.substring(0, customLength-1);
doc.insertString(startOffset, customCode, null);
gInfo.customized = true;
// make guarded "header" and "footer", select the text in between
NbDocument.markGuarded(doc, startOffset, gHead);
NbDocument.markGuarded(doc, startOffset + customLength - gFoot, gFoot);
editor.setSelectionStart(startOffset + gHead);
editor.setSelectionEnd(startOffset + customLength - gFoot);
editor.requestFocus();
combo.setToolTipText(gBlock.getCustomEntry().getToolTipText());
}
else { // changing from custom to default
// remember the customized code
gInfo.customizedCode = doc.getText(startOffset + gHead,
endOffset - gFoot - gHead - startOffset);
NbDocument.unmarkGuarded(doc, endOffset - gFoot, gFoot);
NbDocument.unmarkGuarded(doc, startOffset, gHead);
// keep last '\n' so we don't destroy next editable block's position
doc.remove(startOffset, endOffset - startOffset - 1);
String defaultCode = gBlock.getDefaultCode();
if (defaultCode.endsWith("\n")) // NOI18N
defaultCode = defaultCode.substring(0, defaultCode.length()-1);
doc.insertString(startOffset, defaultCode, null);
gInfo.customized = false;
// make the whole text guarded, cancel selection
NbDocument.markGuarded(doc, startOffset, defaultCode.length()+1); // including '\n'
if (editor.getSelectionStart() >= startOffset && editor.getSelectionEnd() <= endOffset)
editor.setCaretPosition(startOffset);
combo.setToolTipText(NbBundle.getMessage(CustomCodeData.class, "CTL_GuardCombo_Default_Hint")); // NOI18N
}
// we must create a new Position - current was moved away by inserting new string on it
gInfo.position = NbDocument.createPosition(doc, startOffset, Position.Bias.Forward);
docListener.setActive(true);
}
catch (BadLocationException ex) { // should not happen
ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, ex);
}
}
private void comment(JTextComponent target, BaseDocument doc, CommentHandler commentHandler, int[] comments, int from, int to, boolean lineSelection) throws BadLocationException {
// System.out.println("comment");
int diff = 0;
String startDelim = commentHandler.getCommentStartDelimiter();
String endDelim = commentHandler.getCommentEndDelimiter();
//put the comment start
boolean startInComment = false;
if (comments.length > 0) {
int cStart = comments[0];
int cEnd = comments[1];
if (cStart <= from && cEnd > from) {
// the to-be-commented area starts in this comment
startInComment = true;
}
}
if (!startInComment) {
// insert start comment mark
diff += insert(doc, from, startDelim);
}
for (int i = 0; i < comments.length; i += 2) {
int commentStart = comments[i];
int commentEnd = comments[i + 1];
if (commentStart >= from) {
diff += remove(doc, commentStart + diff, startDelim.length());
}
if (commentEnd <= to) {
diff += remove(doc, commentEnd + diff - endDelim.length(), endDelim.length());
}
}
//add closing comment if the last comment doesn't contain the 'to' offset
if (comments.length == 0 || comments[comments.length - 1] <= to) {
diff += insert(doc, to + diff, endDelim);
}
if (!lineSelection) {
//update the selection range, we always add the starting delimiter out of the selection
target.setSelectionStart(from);
target.setSelectionEnd(to + diff);
}
}
private static boolean find2(JTextComponent textComponent,
String searchPhrase, boolean forward, boolean matchCase) {
if (textComponent == null)
throw new NullPointerException(
"No text component was provided to search.");
if (searchPhrase == null)
throw new NullPointerException(
"No search phrase was provided to search for.");
if (searchPhrase.length() == 0)
return false;
if (matchCase == false)
searchPhrase = searchPhrase.toUpperCase();
int[] selection = new int[2];
int startingIndex;
if (forward) {
startingIndex = Math.max(textComponent.getSelectionStart(),
textComponent.getSelectionEnd());
} else {
startingIndex = Math.min(textComponent.getSelectionStart(),
textComponent.getSelectionEnd());
}
int endIndex = forward ? textComponent.getDocument().getLength() : 0;
if (find(textComponent, searchPhrase, forward, matchCase, true,
startingIndex, endIndex, selection)) {
int prevStart = Math.min(textComponent.getSelectionStart(),
textComponent.getSelectionEnd());
int prevEnd = Math.max(textComponent.getSelectionStart(),
textComponent.getSelectionEnd());
// if the selection doesn't change, do nothing.
if (prevStart == selection[0] && prevEnd == selection[1])
return false;
textComponent.setSelectionStart(selection[0]);
textComponent.setSelectionEnd(selection[1]);
highlight(textComponent, selection[0], selection[1]);
return true;
}
return false;
}