2011-11-23 35 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();