2015-04-29 18 views
2

我有一個JDialog,其中包含許多行文本域和一個提交按鈕。我想知道是否可以添加一個eventListener到容器來觸發提交按鈕。如何收聽jdialog容器中的按鍵事件?

+1

看起來像按鍵綁定的使用 – StanislavL

+0

一個。安迪,你可以更加詳細地解釋你的問題讓我能更好地理解你真正想做的事 – Luffy

+0

爲了更好地幫助更快什麼,請加[MCVE(HTTP:/ /stackoverflow.com/help/mcve),說明您擁有的問題。此外,很難說出你想要做什麼,聽到按鍵可能不是正確的方法。 – kiheru

回答

2

一種便捷的方式綁定輸入Action是通過根窗格的setDefaultButton()方法。您也可以在key binding中使用Action,如here所示。

JDialog d = new JDialog(…); 
Action submit = new AbstractAction("Submit") { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // handle submit 
    } 
}; 
private JButton b = new JButton(submit); 
… 
d.getRootPane().setDefaultButton(b); 
2

嘗試增加

frame.getRootPane().setDefaultButton(button); 
    // removing the binding for pressed 
    frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) 
     .put(KeyStroke.getKeyStroke("ENTER"), "none"); 
    // retarget the binding for released 
    frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) 
     .put(KeyStroke.getKeyStroke("released ENTER"), "press"); 

要不然像下面

addKeyListener(new KeyListener(){ 
     @Override 
     public void keyPressed(KeyEvent ke) 
     { 
     if (e.getKeyCode().equals(KeyEvent.VK_ENTER)) 
     { 
     //copy paste the logic you wrote inside the ActionPerformed method 
     } 
     }}); 

     setFocusable(true);//Setting Focus true for ur container 

     requestFocusInWindow();//Requesting the focus. Without this, KeyEvent will not trigger on your container 
+0

作爲JFrame的對象默認情況下不會對來自KeyListener的KeyEvent作出反應 – mKorbel

+0

我很害怕,因此我提供了兩個選項mate –