2012-03-08 3 views
16

세 개의 JButton이있는 JFrame이 있습니다. (JTextField 구성 요소)에 JFrame이로드 될 때 포커스를 설정했습니다. 단추 중 하나가 기본 단추로 설정됩니다. 이건 내 코드입니다 : Enter 키를 누를 때 JFrame의 기본 버튼이 실행되지 않음

private void formWindowOpened(java.awt.event.WindowEvent evt) 
{ 
    // btnRefresh.setMnemonic(KeyEvent.VK_R); // Even if this line 
               // is not commented, but 
               // still the event wouldn't fire. 
    this.getRootPane().setDefaultButton(btnRefresh); 
} 

이로드

가, 버튼이 단지 선택 만 키를 누르면되고 있었다 입력 할 때 그것은 아무것도하지 않았다. 어떻게 올바르게 구현합니까?

btnRefresh.addActionListener(new java.awt.event.ActionListener() { 
    public void actionPerformed(java.awt.event.ActionEvent evt) { 
     btnRefreshActionPerformed(evt); 
    } 
}); 

private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {           
    JOptionPane.showMessageDialog(this, "Pressed!"); 
    // Other codes here (Replace by JOptionPane) 
} 
+0

가장 쉬운 방법은 JFrame이 기본 버튼을 설정 한 후에 requestFocusInWindow()를 호출하는 것입니다. 희망이 사람을 도움이됩니다. – GeriBoss

답변

10

JFrame이 등장 할 때 어떤 구성 요소가 포커스가 있습니까? 일부 구성 요소는 Enter 키 이벤트를 "먹습니다"때문에 묻습니다. 예를 들어, JEditorPane이이를 수행합니다.

또한 ActionListenerJTextField에 할당하면 루트 창에 DefaultButton 대신 ActionListener이 호출됩니다. ActionListener 또는 DefaultButton 중 하나를 선택해야하지만 동일한 JTextField에 대해 두 가지를 동시에 수행 할 수는 없습니다. 이것은 다른 구성 요소에도 적용됩니다.

+0

'JFrame'이로드 될 때'JTextField'가 포커스되도록 설정했습니다. –

+1

정확한 분석이 아니라 해결책 :-) @johntotetwoo에서 이것을 받아들이는 것은 해결책의 방향으로 가리킨다 고 가정합니다. 해결책으로 질문을 편집하는 것이 좋습니다. – kleopatra

+0

Brilliant .. 암호 필드에 actionListener가 있습니다. 응답하지 않는 defaultbutton의 원인이라는 것을 알아 내지 못했습니다. 고맙습니다 – Olu

0

게시 된 글에서 잘못하고있는 내용을 볼 수 없습니다. 다음은 간단한 예제입니다. 아마도 그것은 당신에게 유용한 것을 드러 낼 것입니다.

import java.awt.BorderLayout; 
public class ExampleFrame extends JFrame 
{ 
    private JPanel m_contentPane; 
    private JTextField m_textField; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      try 
      { 
       ExampleFrame frame = new ExampleFrame(); 
       frame.setVisible(true); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public ExampleFrame() 
    { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    m_contentPane = new JPanel(); 
    m_contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    m_contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(m_contentPane); 

    m_textField = new JTextField(); 
    m_contentPane.add(m_textField, BorderLayout.NORTH); 
    m_textField.setColumns(10); 

    JButton btnNewButton = new JButton("Default"); 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(ExampleFrame.this, "Default."); 
     } 
    }); 
    m_contentPane.add(btnNewButton, BorderLayout.CENTER); 

    JButton btnNewButton_1 = new JButton("Not default"); 
    btnNewButton_1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      JOptionPane.showMessageDialog(ExampleFrame.this, "Not default."); 
     } 
    }); 
    m_contentPane.add(btnNewButton_1, BorderLayout.WEST); 
    m_textField.requestFocus(); 
    getRootPane().setDefaultButton(btnNewButton); 
    } 
} 
+1

textField에 actionListener를 추가하고 어떤 일이 발생하는지 확인하십시오 :-) – kleopatra

+0

당신은 그것을 kleopatra에 못 박았습니다! ActionListener를 넣을 때 기본 단추가 실행되지 않았습니다. johntotetwoo, 기본 버튼을 실행하려면 액션 리스너를 제거해야합니다. –

관련 문제