У меня есть JComboBox, установленный как Editable, который я хотел бы, чтобы пользователь мог перейти к следующему элементу управления после нажатия клавиши ввода. Я пробовал много подходов, но ни один из них не работал, на одном из них событие успешно запущено (EditorCompoment.keyRelease), однако метод «transferFocus()» не переносит фокус на следующий элемент управления, как должен. Любая помощь очень ценится. БлагодаряВведите ключ, чтобы вести себя как вкладка на редактируемом JComboBox
public static void addEnterKeyListener(final javax.swing.JComboBox field)
{
field.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
field.setFocusTraversalKeysEnabled(false);
Action myAction = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
field.transferFocus();
}
};
field.getActionMap().put("enter-action", myAction);
field.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("ENTER"), "enter-action");
field.addKeyListener(new KeyAdapter()
{
@Override
public void keyReleased(final KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
System.out.println("Pressed enter inside JComboBox");
field.transferFocus();
}
}
});
field.getEditor().getEditorComponent().addKeyListener(new KeyAdapter()
{
@Override
public void keyReleased(final KeyEvent e)
{
System.out.println("Pressed enter inside JComboBox #2");
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
field.transferFocus();
/*This will fire but will not transfer the focus to the next control*/
System.out.println("Transfered the focus from JComboBox");
}
}
});
field.getEditor().addActionListener(new ActionListener()
{
@Override public void actionPerformed(ActionEvent arg0)
{
field.transferFocus();
}
});
System.out.println("Added enter events to JComboBox");
}
Это хорошо объясняется *** [здесь] (http://docs.oracle.com /javase/tutorial/uiswing/misc/focus.html)***. Вы должны использовать 'setFocusTraversalKeys()' –
, пожалуйста, почему вы добавили кучу Listeners, можете ли вы описать настоящую причину, все эти события не доработаны до тех пор, пока всплывающее окно не будет видно, а затем ничего не вернет или ...., обязательно там несколько способов, для лучшей помощи, прежде чем опубликовать [SSCCE] (http://sscce.org/), короткий, выполнимый, компилируемый, только вопрос, пожалуйста, чтобы отредактировать вопрос с подробным описанием (просто избегая изобретать велосипеды), возможно есть/есть другой способ (ы) – mKorbel