0
문제가 있습니다. 내 키 바인딩 JDialog의 inputMap에 할당 된 Ctrl + Tab이 작동하지 않습니다.JDialog에서 키 바인딩이 작동하지 않는 이유는 무엇입니까?
이 코드를 복사하여 붙여넣고 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();
}
}
감사!
Ctrl-Tab은 Windows 및 일부 Linux 배포판의 OS 기능입니다 ... 어떤 OS를 사용하고 있습니까? JFrame과 함께 작동합니까? –