以下是我的代码
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会更改前景色。
我做错了什么?是"控制标签"为某种目的保留?如果是这样,我怎样才能改变这种行为,以便将键击绑定到我的动作上?