我有一个 JTabbedPane,它必须在按下 Ctrl+Number 时切换选项卡(第一个选项卡为 Ctrl+1)。这是我的代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;
public class NumberSwitchTryout {
public static void main(String[] args) {
JFrame frm = new JFrame("Switch between tabs on Ctrl+Number");
JTabbedPane tabber = new JTabbedPane();
tabber.add("First", new JTextField("First"));
tabber.add("Second", new JTextField("Second"));
tabber.add("Third", new JTextField("Third"));
tabber.add("Fourth", new JTextField("Fourth"));
JPanel enclosingPanel = new JPanel(new BorderLayout());
enclosingPanel.add(tabber);
enclosingPanel.add(new JTextField("Field outside tabber"), BorderLayout.NORTH);
frm.add(enclosingPanel);
for (int i = 0; i < 4; i++) {
ChangeTabAction act = new ChangeTabAction(tabber, i);
KeyStroke stroke = KeyStroke.getKeyStroke("control " + (i + 1));
enclosingPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(stroke, i);
enclosingPanel.getActionMap().put(i, act);
}
frm.setSize(500, 500);
frm.setLocationRelativeTo(null);
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setVisible(true);
}
private static class ChangeTabAction extends AbstractAction {
private JTabbedPane tabber;
private int index;
public ChangeTabAction(JTabbedPane aTabber, int anIndex) {
tabber = aTabber;
index = anIndex;
}
@Override
public void actionPerformed(ActionEvent e) {
tabber.setSelectedIndex(index);
}
}
}
当按下普通数字键时,一切正常。但当按下键盘数字 block 上的按键时失败。一些想法,如何使其也适用于数字键盘(我需要它,因为我们的大多数客户主要使用数字键盘)?
背景:我有一些带有不同数量选项卡的 JTabbedPane(但总是少于 10 个)。所有这些 JTabbedPane 均在类中声明(类的每个实例一个 JTabbedPane)。此类具有方法addTab(String name, Component tab)
。添加选项卡时,我需要注册一个关键操作以在封闭面板中切换到该选项卡。所以我现在寻找一个通用的解决方案。
最佳答案
我不完全确定这是否正确,但它可能有助于指导您找到解决方案。
如果我没记错的话,键盘顶部的数字和小键盘上的数字是不同的实体。我将在下面添加一个使用键盘监听器的示例,您可以将其集成到您的代码中。
例如:
if (e.getKeyCode() == KeyEvent.VK_NUMPAD2)
System.out.println("NUMPAD 2 pressed.");
else if (e.getKeyCode() == KeyEvent.VK_2)
System.out.println("Normal 2 pressed.");
希望这有帮助。
注意:您可以在此处找到 KeyEvent 文档: https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html
关于java - Swing:如果在数字键盘上按下数字,则 Ctrl+数字的操作无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37296371/