답변:
(A)는 JTextField
사용하도록 설계되었다 ActionListener
A는 같은 단지를 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
구현 하는를 사용합니다. 예를 들어 텍스트 필드와 버튼 모두에 대해 이벤트를 비활성화 하는를 비활성화 할 수 있습니다.ActionListener
Action
Action
에 대한 이벤트를 추가하십시오 KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
처리하는 많은 단점이 있습니다 KeyBindings
. OP에서 요청한 것과 같은 사소한 작업의 경우 피해야합니다.
먼저 다음을 수행하여 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
}
}
다른 답변 (허용 된 답변 포함)도 좋지만 이미 Java8을 사용하고 있다면 다음을 수행 할 수 있습니다 (짧고 새로운 방법으로).
textField.addActionListener(
ae -> {
//dostuff
}
);
받아 들여진 대답에서 알 수 있듯이 ActionListener
Enter-Key를 잡는으로 간단히 반응 할 수 있습니다 .
그러나 내 접근 방식은 Java 8에 도입 된 기능적 개념을 활용합니다.
예를 들어 버튼 및 JTextField에 대해 동일한 작업을 사용하려면 다음을 수행 할 수 있습니다.
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
추가 설명이 필요하면 알려주세요!
JTextField 입력에 기본 버튼 동작을 설정하려면 다음을 수행해야합니다.
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
버튼은 많은 액션을 가질 수 있지만 일반적으로 하나만 (ActionPerformed) 있기 때문에 [0]입니다.
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()
KeyListeners
에서 너무 낮은 수준입니다 Swing
. 의도 된 API를 사용하십시오. 와 함께 사용 Swing
:-)
이 코드를 사용하십시오.
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);