2011-11-23 34 views
2

我想添加鍵綁定到我的JFileChooser爲了打開一個文件預覽窗口,當空格鍵被按下。Java KeyBindings with JFileChooser

由於源代碼是太大了,我只是做了一個簡單的髒代碼:

MainWindow.java

package test; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class MainWindow extends JFrame {  
    public MainWindow() { 
     this.setTitle("Test Window"); 
     Dimension dim = new Dimension(800, 600); 
     this.setSize(dim); 
     this.setPreferredSize(dim); 

     MainPanel pane = new MainPanel(dim); 

     Action damned = new AbstractAction() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(null, 
        "It Works !"); 
      } 
     }; 

     pane.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "damned"); 
     pane.getActionMap().put("damned", damned); 

     this.setContentPane(pane); 
     this.setVisible(true); 
    } 
} 

MainPanel.java

package test; 

import java.awt.*; 
import javax.swing.*; 

public class MainPanel extends JFileChooser { 
    public MainPanel(Dimension dim) { 
     this.setSize(dim); 
     this.setPreferredSize(dim);  
    } 
} 

Test.java

package test; 

public class Test { 
    public static void main(String[] args) { 
     new MainWindow(); 
    } 
} 

如果我使用JPanel而不是JFileChooser,它可以工作。

謝謝

瑞文

回答

2

問題獲得的對話框的類型InputMap:默認情況下(不帶參數),即WHEN_FOCUS ED。由於選擇器本身很少集中,綁定將不會被發現。相反,結合在WHEN_ANCESTOR ...

 pane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) 
      .put(KeyStroke.getKeyStroke("F1"), "damned"); 

正如你看到這裏,我的F1將空格替換爲:由這需要輸入名稱

+0

非常感謝你的文本框所需的空間(並因此吃)爲你的答案,它的工作原理:-) – R3v4n

+1

如果你想要替換SPACE鍵呢?你怎麼能做到這一點? –

1

嘗試重寫方法

protected JDialog createDialog(Component parent) 

和你的行動 添加到從

super.createDialog(...) 

dialog.getContentPane();