我想在我的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,它可以正常工作。
谢谢,
瑞文
答案 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();