gpt4 book ai didi

java - 使 Enter 键充当 java 中 jtextfield、jcombobox、jspinner 的 Tab 键

转载 作者:行者123 更新时间:2023-12-02 06:43:27 25 4
gpt4 key购买 nike

我希望 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();
}
});
}
}

最佳答案

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

话虽如此,更改焦点遍历键的最佳方法是向 KeyboardFocusManager 提供 KeyStrokeSet。这将(大部分)使 key 成为全局 key 。

但是,某些组件提供了自己的焦点遍历键,例如 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);
}
}

}

关于java - 使 Enter 键充当 java 中 jtextfield、jcombobox、jspinner 的 Tab 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18889744/

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