swt中关于Text.setSelection()的记录

在Text中setSelect()的作用是选中文本,和按住鼠标左键一直移动的选中的结果一样

selectAll()是全选

如果直接使用,是看不到效果的,需要结合setFocus()一起使用。两者的顺序不影响实际的结果。

测试使用的代码1

package test;

import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.dialogs.*;
public class testlabel {
    public testlabel() {
        final Display display = Display.getDefault();
        final Shell shell = new Shell();
        shell.setSize(370, 235);
        shell.setText("Text 综合实例");
        final Label label1 = new Label(shell, SWT.NONE);
        label1.setBounds(25, 25, 60, 25);
        label1.setText("User Name:");
        final Text text1 = new Text(shell, SWT.BORDER);
        text1.setBounds(90, 20, 80, 20);
        // 当光标停留在该文本框时将出现提示信息
        text1.setToolTipText("文本项不能为空");
        text1.selectAll();
        final Label labe2 = new Label(shell, SWT.NONE);
        labe2.setBounds(190, 25, 55, 25);
        labe2.setText("PassWord:");
        final Text text2 = new Text(shell, SWT.PASSWORD | SWT.BORDER);
        text2.setBounds(250, 20, 80, 20);
        // setTextLimit(int x)为常用组件方法,用来设置文本框中最多可输入的字符数。
        text2.setTextLimit(8);
        text2.setToolTipText("文本项不能为空,且输入不超过8 位密码");
        text2.showSelection();
        final Text text3 = new Text(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
        text3.setBounds(50, 55, 250, 90);
        final Button button1 = new Button(shell, SWT.NONE);
        button1.setBounds(140, 160, 80, 20);
        button1.setText("OK");
        button1.setToolTipText("单击OK 按钮,姓名将显示在下面的文本中");
        button1.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                String AD = text1.getText();// 获得输入的文本内容。
                String BD = text2.getText();
                // 判断输入文本是否为空
                if (AD == null || AD.equals("") || BD == null || BD.equals("")){
                    MessageDialog.openInformation(shell, " 信息提示", "失败信息!"
                    + '\n' + '\n' + " 注意:文本项不能为空!!!……");
                } else
                    text3.append("User Name: " + '\n' + "" + AD + '\n'
                    + "PassWord:" + '\n' + "" + BD);
                
                /**
                * append()方法用来在文本框中显示内容。
                * 将append()方法改为insert()方法可达到同样的效果
                */
            }
        });
        final Button button2 = new Button(shell, SWT.NONE);
        button2.setBounds(250, 160, 80, 20);
        button2.setText("Cancel");
        button2.setToolTipText("单击Cancel 按钮,清除文本中的内容");
        button2.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                text1.setFocus();
                text1.setSelection(0,1);        //测试的地方
                //text1.clearSelection();// 清除文本内容方法
                //text1.showSelection();
                text2.setText("");
                text3.setText("");
            }
        });
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
            display.sleep();
        }
    }
    public static void main(String[] args) {
        new testlabel();
    }
}

在输入内容后点击Cancel,结果为第一个字被选中

swt中关于Text.setSelection()的记录

当使用text1.clearSelection()后,会取消选中显示光标,截不出来图,在“阿”后面即第一个位置,阿前是第0个位置。

最后一个是showSelection(),从官网找来的说明https://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fwidgets%2FText.html

即显示选中的内容,如果没有显示则通过滚动到选中位置来显示。

showSelection

public void showSelection()
Shows the selection.

If the selection is already showing in the receiver, this method simply returns. Otherwise, lines are scrolled until the selection is visible.

Throws:
SWTException -
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver

还有一个例子http://www.java2s.com/Code/JavaAPI/org.eclipse.swt.widgets/TextclearSelection.htm

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class MainClass {

  public static void main(String[] a) {
    Display d = new Display();
    Shell s = new Shell(d);

    Text text1 = new Text(s, SWT.WRAP | SWT.BORDER);
    text1.setBounds(100, 50, 100, 20);
    text1.setTextLimit(5);
    text1.setText("12345");
    Text text2 = new Text(s, SWT.SINGLE | SWT.BORDER);
    text2.setBounds(100, 75, 100, 20);
    text2.setTextLimit(30);

    FocusListener focusListener = new FocusListener() {
      public void focusGained(FocusEvent e) {
        Text t = (Text) e.widget;
        t.selectAll();
      }

      public void focusLost(FocusEvent e) {
        Text t = (Text) e.widget;
        if (t.getSelectionCount() > 0) {
          t.clearSelection();
        }
      }
    };
    text1.addFocusListener(focusListener);
    text2.addFocusListener(focusListener);

    s.open();
    while (!s.isDisposed()) {
      if (!d.readAndDispatch())
        d.sleep();
    }
    d.dispose();
  }
}
上一篇:LeetCode 831. 隐藏个人信息


下一篇:kmp算法专题