gpt4 book ai didi

java - 按下 '.' 时按 Tab 键切换到 Eclipse JFace 对话框中的下一个字段

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:34 24 4
gpt4 key购买 nike

我有一个 Eclipse JFace Dialog,其中包含多个 Text 字段。当用户在文本字段中按下 . 键时,我希望它的行为就像按下了 Tab 键一样,并将焦点发送到下一个文本字段,然后将 . 丢弃(想象一下输入 IP 地址)。

如何最好地实现这一点?

最佳答案

下面的内容就是你想要的。基本上,它将 KeyListenerFocusListener 添加到 Text 小部件,并在按下 . 时循环遍历它们:

public class TestClass
{
private static int counter = 0;

public static void main(String[] args)
{
Display display = Display.getDefault();
Shell shell = new Shell(display);

shell.setLayout(new FillLayout());

/* These are the text fields */
final Text textOne = new Text(shell, SWT.BORDER);
final Text textTwo = new Text(shell, SWT.BORDER);
final Text textThree = new Text(shell, SWT.BORDER);

/* Save them in an arraylist */
final ArrayList<Text> textFields = new ArrayList<Text>();
textFields.add(textOne);
textFields.add(textTwo);
textFields.add(textThree);

/* save their position as well (not optimal, you can think of an easier method) */
final HashMap<Text, Integer> textFieldsMapping = new HashMap<Text, Integer>();
textFieldsMapping.put(textOne, 0);
textFieldsMapping.put(textTwo, 1);
textFieldsMapping.put(textThree, 2);

/* Define keylistener which takes care of using . as tab */
KeyListener keyListener = new KeyListener() {

@Override
public void keyReleased(KeyEvent arg0) {
}

@Override
public void keyPressed(KeyEvent arg0) {
/* if '.' pressed */
if(arg0.character == '.')
{
/* ignore this action */
arg0.doit = false;

/* get next text field */
Text next = textFields.get(counter);

/* force focus on this text field */
next.setFocus();
next.forceFocus();
}
}
};

/* Define focuslistener which sets current position */
FocusListener focusListener = new FocusListener() {

@Override
public void focusLost(FocusEvent arg0) {
}

@Override
public void focusGained(FocusEvent arg0) {
/* get current text field */
Text current = (Text)arg0.getSource();

/* get current position */
int currentPosition = textFieldsMapping.get(current);

/* set counter to next text field */
counter = (currentPosition + 1) % textFields.size();
}
};

/* add keylistener to text fields */
textOne.addKeyListener(keyListener);
textTwo.addKeyListener(keyListener);
textThree.addKeyListener(keyListener);

/* add focuslistener to text fields */
textOne.addFocusListener(focusListener);
textTwo.addFocusListener(focusListener);
textThree.addFocusListener(focusListener);

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

关于java - 按下 '.' 时按 Tab 键切换到 Eclipse JFace 对话框中的下一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11652312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com