gpt4 book ai didi

java - 为什么 JDialog 中的键绑定(bind)不起作用?

转载 作者:行者123 更新时间:2023-12-01 13:06:15 25 4
gpt4 key购买 nike

我有一个问题。我分配给 JDialog 的 inputMap 的按键绑定(bind) Ctrl+Tab 不起作用。

请复制粘贴此代码并键入 Ctrl+TAB 来体验该问题。它应该打印到控制台,但没有。

public class PopupFilesAccessor extends JDialog {

private static PopupFilesAccessor filesAccessor = new PopupFilesAccessor();

private DefaultListModel<String> filesModel;
private JList<String> files;

public PopupFilesAccessor() {
super(null, "Demo", ModalityType.APPLICATION_MODAL);
super.setUndecorated(true);
super.setAlwaysOnTop(true);
super.setLocationRelativeTo(null);

filesModel = new DefaultListModel<>();

files = new JList<>(filesModel);
files.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
files.setLayoutOrientation(JList.HORIZONTAL_WRAP);
files.setVisibleRowCount(0);
// files.setCellRenderer(new FilesListCellRenderer());

InputMap inputMap = super.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap actionMap = super.getRootPane().getActionMap();

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.CTRL_DOWN_MASK), "selectDown");
actionMap.put("selectDown", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
selectNextItem();
}

private void selectNextItem() {
System.out.println("Good! selectNextItem method is running");
}
});

JScrollPane scrollBar = new JScrollPane(files);
super.getContentPane().add(scrollBar);
}

private void prepareToShow() {
List<String> openedFiles = Arrays.asList("item1", "item2", "item3", "item4", "item5", "item6", "item7");
filesModel.clear();
for (int i = 0; i < openedFiles.size(); i++) {
String userFile = openedFiles.get(i);
filesModel.addElement(userFile);
}
files.setSelectedIndex(1);
super.pack();
}

public static void popup() {
filesAccessor.prepareToShow();
filesAccessor.setVisible(true);
filesAccessor.requestFocusInWindow();
}

public static void main(String[] args) {
PopupFilesAccessor.popup();
}
}

谢谢!

最佳答案

这不是一个好方法,但您仍然可以尝试使用 ActionEvent#paramString()如果它适合你。

long eventMask = AWTEvent.KEY_EVENT_MASK;

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
public void eventDispatched(AWTEvent e) {
String paramString = e.paramString();
// System.out.println(paramString);
if (paramString.contains("KEY_RELEASED,keyCode=9,keyText=Tab,keyChar=Tab,modifiers=Ctrl,extModifiers=Ctrl")) {
System.out.println("Ctrl+Tab keys are released");
}
}
}, eventMask);

注意:您还可以检查参数字符串的其他组合。

关于java - 为什么 JDialog 中的键绑定(bind)不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23243380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com