按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); } }
上面的代码片段的输出是: