Java 删除默认JButton输入映射
在java swing应用程序中删除组件上的默认输入映射信息时遇到一些问题。这就是我想做的:Java 删除默认JButton输入映射,java,swing,user-interface,applet,Java,Swing,User Interface,Applet,在java swing应用程序中删除组件上的默认输入映射信息时遇到一些问题。这就是我想做的: //List of keys to remove public static final int[] OVERWRITTEN_KEYS = { VK_SPACE }; //Get default input maps InputMap[] im = { (InputMap)UIManager.get("Button.focusInputMap"), (InputMap)UI
//List of keys to remove
public static final int[] OVERWRITTEN_KEYS =
{
VK_SPACE
};
//Get default input maps
InputMap[] im = {
(InputMap)UIManager.get("Button.focusInputMap"),
(InputMap)UIManager.get("ToggleButton.focusInputMap"),
(InputMap)UIManager.get("Slider.focusInputMap"),
(InputMap)UIManager.get("RadioButton.focusInputMap"),
(InputMap)UIManager.get("TextArea.focusInputMap"),
(InputMap)UIManager.get("TextField.focusInputMap")
};
//Loop through input maps
for(int i = 0; i < im.length; i++)
{
//Loop through keys
for(int j = 0; j < OVERWRITTEN_KEYS.length; j++)
{
if(im[i] != null)
{
//Overwrite press and release of button
im[i].put(KeyStroke.getKeyStroke(OVERWRITTEN_KEYS[j],0,false), "none");
im[i].put(KeyStroke.getKeyStroke(OVERWRITTEN_KEYS[j],0,true), "none");
}
}
}
//要删除的密钥列表
公共静态最终int[]覆盖的_键=
{
VK_空间
};
//获取默认输入映射
InputMap[]im={
(InputMap)UIManager.get(“Button.focusInputMap”),
(InputMap)UIManager.get(“ToggleButton.focusInputMap”),
(InputMap)UIManager.get(“Slider.focusInputMap”),
(InputMap)UIManager.get(“RadioButton.focusInputMap”),
(InputMap)UIManager.get(“TextArea.focusInputMap”),
(InputMap)UIManager.get(“TextField.focusInputMap”)
};
//循环输入映射
for(int i=0;i
但是,出于某种原因,这没有效果。按空格键仍会触发JButton单击等。是否有人看到此代码块有问题?事先谢谢。我无法再现您描述的问题。我通常会修改组件的
InputMap
,但是UIManager
实例具有默认绑定。在下面的例子中
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), NIL);
有效地阻止空格键调用按钮的ActionListener
。取消行的注释
button.getActionMap().put(NIL, nil);
将空格键与有效的空操作关联,如中所述的doNothing
操作中所示
我试过了,但是当我调用
UIManager.get(“Button.focusInputMap”)时,我的UI管理器返回了null代码>。你知道为什么会这样吗?我应该提到,我正在使用一个定制的synth外观,它是由我编写的xml文件生成的……对不起,不知道如何使用XML添加一个新的focusInputMap
。那么除了遍历所有组件并一次执行一个操作之外,没有办法从每个组件输入映射中删除一个键吗?我想我不明白为什么自定义L&F会为focusInputMap
默认值返回null
,当原始L&F拥有它们时。
/**
* @see http://stackoverflow.com/q/12133795/230513
*/
public class NilBindingTest extends JPanel {
private static final String NIL = "none";
private Action nil = new AbstractAction(NIL) {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("\"" + e.getActionCommand() + "\"");
}
};
private JButton button = new JButton(nil);
//private InputMap im = button.getInputMap();
private InputMap im = (InputMap) UIManager.get("Button.focusInputMap");
public NilBindingTest() {
this.add(new JButton("foo"));
System.out.println(Arrays.toString(im.keys()));
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), NIL);
//button.getActionMap().put(NIL, nil);
this.add(button);
}
private void display() {
JFrame f = new JFrame("NilBindingTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NilBindingTest().display();
}
});
}
}