按a中的表格键时的默认行为JTextArea是在文本区域中插入一个制表符空格。在此示例中,您将看到如何进行更改以使Tab键可以将焦点向前或向后转移到其他组件。
主例程可以在关键侦听器部分中找到。当按下Tab键时,我们将告诉文本区域转移到其他组件上。让我们看看下面的代码片段。
package org.nhooo.example.swing;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class TextAreaTabMoveFocus extends JFrame {
public TextAreaTabMoveFocus() {
initialize();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new TextAreaTabMoveFocus().setVisible(true));
}
private void initialize() {
setSize(500, 200);
setTitle("JTextArea TAB DEMO");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JTextField textField = new JTextField();
JPasswordField passwordField = new JPasswordField();
final JTextArea textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
// 添加关键侦听器以更改TAB行为
// JTextArea将焦点转移到其他组件
// 或向后。
textArea.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_TAB) {
if (e.getModifiersEx() > 0) {
textArea.transferFocusBackward();
} else {
textArea.transferFocus();
}
e.consume();
}
}
});
getContentPane().add(textField, BorderLayout.NORTH);
getContentPane().add(scrollPane, BorderLayout.CENTER);
getContentPane().add(passwordField, BorderLayout.SOUTH);
}
}上面的代码片段的输出是: