CCombo中的文本选择

时间:2016-12-28 22:27:13

标签: java swt ccombo

当用户选择CCombo(或CCombo增益焦点)中的项目时,该字段中的文本将被选中。如何以编程方式删除此选择并将光标位置设置在文本末尾?

1 个答案:

答案 0 :(得分:0)

您可以添加选择和焦点侦听器,并使用setSelection修改光标位置,例如:

public static void main(String[] args) {

    Display display = new Display();

    Shell shell = new Shell(display);
    shell.setSize(300, 150);
    shell.setLayout(new GridLayout());

    CCombo combo = new CCombo(shell, 0);
    combo.setItems(new String[] { "String 1", "Test", "StackOverflow"});

    combo.addSelectionListener(selectionAdapter);
    combo.addFocusListener(focusAdapter);

    CCombo combo2 = new CCombo(shell, 0);
    combo2.setItems(new String[] { "String 1", "Test", "StackOverflow"});

    combo2.addSelectionListener(selectionAdapter);
    combo2.addFocusListener(focusAdapter);

    shell.open();
    while (!shell.isDisposed()) {
        if (!shell.getDisplay().readAndDispatch()) {
            shell.getDisplay().sleep();
        }
    }
}

static void selectionAtEnd(CCombo c) {
    // get the length of the selected item
    String text = c.getText();
    int endSelection = text.length();

    // set the cursor at the end of the text
    c.setSelection(new Point(endSelection, endSelection));
}

static SelectionAdapter selectionAdapter = new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent arg0) {
        // change selection when an item is selected
        selectionAtEnd((CCombo) arg0.getSource());
    }   
};

static FocusAdapter focusAdapter = new FocusAdapter() {
    @Override
    public void focusGained(FocusEvent arg0) {
        // change selection when focus is gained
        selectionAtEnd((CCombo) arg0.getSource());
    }
};

结果:

CCombo animation