有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing使enter键在java中的作用类似于jtextfield、jcombobox和jspinner的tab键

我希望enter键的行为与swing应用程序中的tab键类似。这门课在JTextFields上运行良好。如何对JComboBox和Jspinner或框架上的其他控件执行相同的操作?请帮忙

class MyTextField extends JTextField {
    MyTextField(int len) {
    super(len);
    addKeyListener(new KeyAdapter() {
            @Override
      public void keyPressed(KeyEvent evt) {
        int key = evt.getKeyCode();
        if (key == KeyEvent.VK_ENTER)
          transferFocus();
      }
    });
  }
}

共 (1) 个答案

  1. # 1 楼答案

    Enter对Swing中的大多数组件都有特殊意义,例如,当按下Enter时,JTextField将在注册的ActionListeners上触发actionPerformed。修改此行为可能会给应用程序带来意想不到的结果,并可能会让许多用户感到困惑

    话虽如此,更改焦点遍历键的最佳方法是向KeyboardFocusManager提供SetKeyStrokes。这将(主要)使密钥的全局性

    然而,一些组件提供了自己的焦点遍历键,比如JTextAreaJTable

    更多细节请看How to use Focus Subsystem

    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.awt.GridBagLayout;
    import java.awt.KeyboardFocusManager;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.util.HashSet;
    import java.util.Set;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.KeyStroke;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class TestFocusTraversal {
    
        public static void main(String[] args) {
            new TestFocusTraversal();
        }
    
        public TestFocusTraversal() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            public TestPane() {
                setLayout(new GridBagLayout());
                for (int index = 0; index < 10; index++) {
                    JTextField tf = new JTextField(5);
                    tf.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            System.out.println("...");
                        }
                    });
                    add(tf);
                }
    
                add(new JScrollPane(new JTextArea(10, 10)));
    
                KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
                KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
                KeyStroke ctrlTab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.CTRL_DOWN_MASK);
                Set<KeyStroke> keys = new HashSet<>();
                keys.add(enter);
                keys.add(tab);
                keys.add(ctrlTab);
                KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
            }
        }
    
    }