JTextField에서 Enter Press 감지


103

EnterJava에서 JTextField를 입력하는 동안 누군가가 누를 때 감지 할 수 있습니까? 버튼을 만들고 기본값으로 설정하지 않아도됩니다.

답변:


168

(A)는 JTextField사용하도록 설계되었다 ActionListenerA는 같은 단지를 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 );

이제 Enter키가 사용 되면 이벤트 가 시작됩니다.

또한 버튼을 기본 버튼으로 만들고 싶지 않더라도 리스너를 버튼과 공유 할 수 있다는 추가 이점이 있습니다.

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

이 예제는 추가 기능이있는 최신 API 이기 때문에 Action구현 하는를 사용합니다. 예를 들어 텍스트 필드와 버튼 모두에 대해 이벤트를 비활성화 하는를 비활성화 할 수 있습니다.ActionListenerActionAction


1
동의합니다. 일반적으로 내 것보다 더 우아한 솔루션입니다.
Kos

@camickr 자바 스윙의 전문가입니다
모하메드 Iqzas

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

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

위와 같이 JTextField에 addActionListener 만 추가하면됩니다! 당신이 누른 Enter후 액션은 당신이 진술에서 원하는 것을 수행합니다!


16

에 대한 이벤트를 추가하십시오 KeyPressed.

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

-1 :( KeyListeners는 Swing의 관점에서 볼 때 너무 낮은 수준입니다. Swing과 함께 사용하도록 의도 된 API를 사용하십시오. :-)
nIcE cOw 2013-08-20

1
@nIcEcOw KeyListeners는 Swing의 관점에서 볼 때 너무 낮은 수준입니다 . CITATION NEEDED.
귀도

2
@ ᴳᵁᴵᴰᴼ : 아주 잘 문서화 된 것은 KeyBindings 의 공식 튜토리얼에서 찾을 수 있지만 stackoverflow에 대한 아주 좋은 대답 은 같은 측면을 다룹니다 :-)
nIcE cOw

1
@nIcEcOw 그것은 내가 염두에 둔 문서 페이지입니다. 내가하는 제안 사이에 차이를 많이 찾을 에만 낮은 수준의 키보드를 제어하기위한 수신기를 사용, 바로 가기 및 행동에 대한 바인딩을 선호 하고, 그것은 잘못된 API 때문에 사용하지 마십시오 . 문서 페이지도 그렇게 흑백이 아닙니다.
귀도

1
@ ᴳᵁᴵᴰᴼ : 초점 관련, 복사 / 붙여 넣기 관련 등에서 더 많이 KeyListeners처리하는 많은 단점이 있습니다 KeyBindings. OP에서 요청한 것과 같은 사소한 작업의 경우 피해야합니다.
nIcE cOw

9

이와 같은 작업을 하시겠습니까?

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();
            }
        }

    });

1

먼저 다음을 수행하여 JButton 또는 JTextField에 작업 명령을 추가합니다.

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

그런 다음 JTextField 및 JButton에 ActionListener를 추가합니다.

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
    }
}

1

다른 답변 (허용 된 답변 포함)도 좋지만 이미 Java8을 사용하고 있다면 다음을 수행 할 수 있습니다 (짧고 새로운 방법으로).

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

받아 들여진 대답에서 알 수 있듯이 ActionListenerEnter-Key를 잡는으로 간단히 반응 할 수 있습니다 .

그러나 내 접근 방식은 Java 8에 도입 된 기능적 개념을 활용합니다.

예를 들어 버튼 및 JTextField에 대해 동일한 작업을 사용하려면 다음을 수행 할 수 있습니다.

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

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

추가 설명이 필요하면 알려주세요!


0

JTextField 입력에 기본 버튼 동작을 설정하려면 다음을 수행해야합니다.

//put this after initComponents();

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

버튼은 많은 액션을 가질 수 있지만 일반적으로 하나만 (ActionPerformed) 있기 때문에 [0]입니다.


0

프레임의 각 텍스트 필드에 대해 addKeyListener 메서드를 호출합니다. 그런 다음 다른 사람들이 지시 한대로 keyPressed 메서드를 구현하고 재정의합니다. 이제 프레임의 모든 필드에서 Enter 키를 눌러 작업을 활성화 할 수 있습니다.

@Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                //perform action
            }
        }

-2
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()


1
-1 :( 같은 실수를 다시 반복하기 위해 이전 답변에서 이미 반대 투표를 받았으며 동일한 이유와 함께. 의 관점 KeyListeners에서 너무 낮은 수준입니다 Swing. 의도 된 API를 사용하십시오. 와 함께 사용 Swing :-)
nIcE cOw

-3

이 코드를 사용하십시오.

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.