Java 重置inputmap和actionmap(键绑定)

Java 重置inputmap和actionmap(键绑定),java,key-bindings,Java,Key Bindings,如果创建了新的JPanel并将其添加到原始帧中,是否可以重置inputmap和actionmap?在我看来,inputmap和actionmap是静态的,这意味着它们中只有一个是由所有JPanel共享的,对吗 例: (这不起作用) 某些击键设置在roles_manager类型的变量中,以更改变量的特定值。我需要为新的roles\u manager变量重置它否,每个操作/输入映射分别由组件的每个实例维护,也许您想分享一个运行中的示例,演示您遇到的问题……新创建的JPanel默认情况下没有映射,因此

如果创建了新的JPanel并将其添加到原始帧中,是否可以重置inputmap和actionmap?在我看来,inputmap和actionmap是静态的,这意味着它们中只有一个是由所有JPanel共享的,对吗

例:

(这不起作用)


某些击键设置在roles_manager类型的变量中,以更改变量的特定值。我需要为新的roles\u manager变量重置它

否,每个操作/输入映射分别由组件的每个实例维护,也许您想分享一个运行中的示例,演示您遇到的问题……新创建的JPanel默认情况下没有映射,因此,如果您遇到某种问题,它可能来自其他原因。如果你打开文档,你的实际问题可以在30秒钟内得到回答。好吧,让我们从开始,不要在EDT中睡觉,尤其不要在绘画方法中睡觉。不要在paint方法中调用repaint,这将建立一个永不结束的repaint请求循环,最终将消耗您的CPU
game_compos(main_frame frame_)
{
    frame=frame_;
    refresh=1000;
    restart();
    if_restart=false;
}
public void restart()
{
    if(jp!=null)
        frame.remove(jp);
    jp=new JPanel();
    jp.getInputMap().put(KeyStroke.getKeyStroke("N"),"restart");
    jp.getActionMap().put("restart",new AbstractAction(){
        public void actionPerformed(ActionEvent event)
        {
            if_restart=true;
        }
    });
    map=new map_utilities();
    roles=new roles_manager(refresh,frame,map,jp);
    frame.add(jp);
}
public void paintComponent(Graphics g)
{
    if(if_restart)
    {
        if_restart=false;
        restart();
    }
    map.draw(g);
    roles.draw(g);
    try
    {
        TimeUnit.MICROSECONDS.sleep(refresh);
    }
    catch(InterruptedException e)
    {
        Thread.currentThread().interrupt();
    }
    repaint();
}