2013-10-15 1 views
0

사용자 지정 스윙 구성 요소와 JTextfield 및 JButton이있는 JFrame이 있습니다. JButton이 기본 버튼으로 설정되었습니다. 포커스가있는 텍스트 필드에 들어가면 Enter 키를 누르면 버튼이 트리거됩니다. 하지만 순간에 enter 버튼을 누르면 포커스 버튼의 맞춤 구성 요소가 실행되지 않습니다. 이 사용자 지정 구성 요소에서 특별 이벤트를 않기 때문에사용자 지정 구성 요소에서 포커스가있을 때 기본 단추가 키를 입력하지 않습니다.

package org.laki.test; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.JButton; 
import java.awt.FlowLayout; 
import javax.swing.JComboBox; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 

public class TestFrame extends JFrame { 
private JTextField textField; 
public TestFrame() { 
    getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); 

    textField = new JTextField(); 
    getContentPane().add(textField); 
    textField.setColumns(10); 

    ComboBox comboBox = new ComboBox(); 
    comboBox.addItem("lakshman"); 
    comboBox.addItem("tharindu"); 
    comboBox.addItem("Ishara"); 
    getContentPane().add(comboBox); 

    JButton btnNewButton = new JButton("Test"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      System.out.println("enter is hitting...!!!"); 
     } 
    }); 
    getContentPane().add(btnNewButton); 
    this.rootPane.setDefaultButton(btnNewButton); 
} 

private class ComboBox extends JComboBox<String> 
{ 
    private static final long serialVersionUID = 10000012219553L; 

    @Override 
    public void processKeyEvent(final KeyEvent event) 
    { 
    if ((event.getKeyCode() == KeyEvent.VK_DOWN) || 
     (event.getKeyCode() == KeyEvent.VK_SPACE)) 
    { 
      doSomthing(); 
    } 
    else if(event.getKeyCode() == KeyEvent.VK_ENTER) 
    { 
     //I added this to capture the enter event 
    } 
    } 
} 
public static void main(String[] args) { 
    TestFrame testframe = new TestFrame(); 
    testframe.setSize(300, 400); 
    testframe.setVisible(true); 
} 

} 

나는 processKeyEvent를 방법을 제거 할 수 없습니다. 사용자 지정 구성 요소에서 포커스를 맞추는 동안 enter 키를 눌러 단추를 튕기려면 어떻게해야합니까?

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

그리고 이런 식으로 어떤 이유인지 설명이 추가되었습니다. – mKorbel

+0

에 SSCCE – lakshman

답변

0

사용자 지정 구성 요소가 JComponent.processKeyEvent()을 재정의하고 해당 부모 구현을 호출하지 않을 수 있습니다. 확인 후 키 이벤트를 부모에게 전달하십시오.

super.processKeyEvent(event); 
+0

@downvoter : 이유를 설명해 주시겠습니까? – chAmi

관련 문제