为什么控制TAB按键不起作用?

时间:2015-07-30 15:45:06

标签: java swing keystroke

以下是我的代码

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.util.Arrays;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class Test {
    private int selected = 0;

    public Test() {

        JLabel[] lables = new JLabel[] { new JLabel("Lable1"),
                new JLabel("Label2") };
        JFrame frame = new JFrame("FrameDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = (JPanel) frame.getContentPane();
        contentPane.setLayout(new FlowLayout());
        contentPane.add(lables[0]);
        contentPane.add(lables[1]);
        frame.pack();

        contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
                KeyStroke.getKeyStroke("control TAB"), "next");
        Action action = new AbstractAction("next") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                selected++;
                Arrays.stream(lables).forEach(
                        l -> l.setForeground(Color.LIGHT_GRAY));
                lables[selected % 2].setForeground(Color.BLACK);

                System.out.println(selected);
                contentPane.revalidate();
                contentPane.repaint();
            }
        };
        contentPane.getActionMap().put("next", action);

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Test();

    }
}

但是当我按下控制TAB时,没有任何反应。但是,当我将代码更改为KeyStroke.getKeyStroke("control K"), "next");时,控件K keystorke会更改前景色。

我做错了什么?是"控制标签"为某种目的保留?如果是这样,我怎样才能改变这种行为,以便将键击绑定到我的动作上?

0 个答案:

没有答案