使用JFileChooser的Java KeyBindings

时间:2011-11-23 10:09:04

标签: java swing jfilechooser key-bindings

我想在我的JFileChooser添加键绑定,以便在按下SPACE键时打开文件预览窗口。

由于源代码太大,我只是做了一个简单的脏代码:

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 个答案:

答案 0 :(得分:2)

问题是InputMap的类型:默认情况下(没有参数),即WHEN_FOCUSED。由于选择器本身很少聚焦,因此无法找到绑定。而是绑定在WHEN_ANCESTOR ...

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

正如你在这里看到的那样,我用F1替换了SPACE:需要(并因此被吃掉)的空间需要输入名称的文本字段

答案 1 :(得分:1)

尝试覆盖方法

protected JDialog createDialog(Component parent)

并添加您的操作 从

获得的对话框
super.createDialog(...)

dialog.getContentPane();