Обнаружение enter нажмите в JTextField



можно ли обнаружить, когда кто-то нажимает введите при вводе в JTextField в java? Без необходимости создавать кнопку и устанавливать ее по умолчанию.

602   9  

9 ответов:

A JTextField был разработан, чтобы использовать ActionListener как JButton есть. Смотрите addActionListener() метод JTextField.

например:

Action action = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("some action");
    }
};

JTextField textField = new JTextField(10);
textField.addActionListener( action );

теперь событие запускается, когда введите ключ.

кроме того, дополнительным преимуществом является то, что вы можете поделиться слушателем с кнопкой, даже если вы не хотите, чтобы кнопка была кнопкой по умолчанию.

JButton button = new JButton("Do Something");
button.addActionListener( action );

обратите внимание, что в этом примере используется Action, который реализует ActionListener потому что Action это новый API с дополнительными функциями. Например, вы можете отключить Action который отключит событие как для текстового поля, так и для кнопки.

JTextField function=new JTextField(8);   
function.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

все, что вам нужно сделать, это addActionListener в JTextField, как указано выше! После того, как вы нажмете введите действие будет выполнено то, что вы хотите за заявление!

добавить событие для KeyPressed.

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
  if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
      // Enter was pressed. Your code goes here.
   }
} 

вы хотите сделать что-то вроде этого ?

JTextField mTextField = new JTextField();
    mTextField.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                // something like...
               //mTextField.getText();
               // or...
               //mButton.doClick();
            }
        }

    });

Сначала добавьте команду действия на JButton или JTextField by:

JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");

затем добавьте ActionListener в JTextField и JButton.

JButton.addActionListener(listener);
JTextField.addActionListener(listener);

после этого, на вас ActionListener реализации написать

@Override
public void actionPerformed(ActionEvent e)
{
    String actionCommand = e.getActionCommand();

    if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your   actionCommand for press Enter"))
    {
        //Do something
    }
}

другие ответы (включая принятые) хороши, но если вы уже используете Java8, вы можете сделать следующее (короче, более новым способом):

textField.addActionListener(
    ae -> {
        //dostuff
    }
);

как сказал принятый ответ, вы можете просто реагировать с ActionListener, который ловит клавишу Enter.

однако мой подход использует преимущества функциональных концепций, которые были введены в Java 8.

Если вы хотите использовать одно и то же действие, например, для кнопки и JTextField, вы можете сделать следующее:

ActionListener l = ae -> {
    //do stuff
}

button.addActionListener(l);
textField.addActionListener(l);

Если требуется дальнейшее объяснение, пожалуйста, дайте мне знать!

Если вы хотите установить Действие кнопки по умолчанию в поле ввода JTextField, вы должны сделать это:

//put this after initComponents();

textField.addActionListener(button.getActionListeners()[0]);

это [0], потому что кнопка может иметь много действий, но обычно только один (ActionPerformed).

public void keyReleased(KeyEvent e)
{
    int key=e.getKeyCode();
    if(e.getSource()==textField)
    {
        if(key==KeyEvent.VK_ENTER)
        { 
            Toolkit.getDefaultToolkit().beep();
            textField_1.requestFocusInWindow();                     
        }
    }

чтобы написать логику для "Enter press" в JTextField, лучше держать логику внутри keyReleased() блок вместо keyTyped() & keyPressed().

просто используйте этот код:

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);

Comments

    Ничего не найдено.