使用助记符调用 JButton 按下动画

Call JButton pressed animation using mnemonic

这是一个示例代码,我已经尝试了大部分 JButton 设置但无法弄清楚。

import java.awt.event.*;

import javax.swing.*;

public class FailedMnemonic extends JFrame implements Runnable{

    /*
     * 
     * F4 to call button action
     * ESC to dispose Dialog
     * 
     * */

    public FailedMnemonic() {
        setSize(200, 100);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(null);
        Panel p = new Panel(this);
        p.setBounds(0, 0, 200, 60);
        add(p);
    };

    public static void main(String args[]){
        FailedMnemonic f = new FailedMnemonic();
        f.setVisible(true);
    }

    @Override
    public void run() {

    }

    public class Panel extends JPanel{

        final JFrame f;
        Action a = new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                /*Here should be called the pressed animation from the button, dont know how
                 * maybe i should add the button as parameter on the dialog class so when is dispose the button returns to its original state*/
                Dialog d = new Dialog(f, "...", true);
                d.setSize(500, 200);
                d.setVisible(true);
            }
        };

        JButton b = new JButton();

        public Panel(JFrame f){
            this.f = f;
            setLayout(null);
            b.setBounds(0, 0, 150, 50);
            b.setAction(a);
            a.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_F4);
            getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
                    KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0), "meh");
            getActionMap().put("meh", a);
            b.setText("CLICK ME");
            add(b);
        }

        public class Dialog extends JDialog{

            public Dialog(JFrame OWNER, String title, boolean modal){
                super(OWNER, title, modal);
                setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                addEscapeListener(this);
            }

            public void addEscapeListener(final JDialog dialog) {
                ActionListener escListener = new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        dialog.setVisible(false);
                    }};
                dialog.getRootPane().registerKeyboardAction(escListener,
                        KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
                        JComponent.WHEN_IN_FOCUSED_WINDOW);

            }

        }

    }

}

导入没有进入块代码

不要调用您的 类 "Frame" 和 "Dialog"。有同名的 AWT 组件,所以它会让人感到困惑。使用更多的描述名称(即使是快速演示代码)。

Call JButton pressed animation using mnemonic

在Windows我使用Alt+F4时得到了动画,这是助记符。我使用F4键绑定时没有得到动画。

这是有道理的,因为使用 Key Bindings 您只需将 KeyStroke 映射到 Action。它不知道 Action 属于按钮。

如果你想看到按钮动画那么我建议你需要:

  1. 向按钮添加一个普通的 ActionListener 以显示您的对话框
  2. 为键绑定创建一个动作。然后此操作将调用 button.doClick().

请注意,您可能还想查看 Escape Key and Dialog 以获得更完整的操作。此操作将支持使用转义键关闭组合框下拉菜单。