Java JTextArea KeyListener
Posted
技术标签:
【中文标题】Java JTextArea KeyListener【英文标题】: 【发布时间】:2013-08-31 06:50:54 【问题描述】:当我按下 ENTER 时,我的 JTextArea 开始一个新行,我只想对 doClick() 方法执行其他操作。 我该怎么做?
textarea.addKeyListener(new KeyListener()
@Override
public void keyPressed(KeyEvent e)
if(e.getKeyCode() == KeyEvent.VK_ENTER)
button.doClick();
@Override
public void keyTyped(KeyEvent e)
@Override
public void keyReleased(KeyEvent e)
);
【问题讨论】:
根本不要使用 keyListeners(想知道你的代码是如何工作的:你有 focusable 标签?多么奇怪和让用户感到困惑......) - 使用 keyBindings 【参考方案1】:使用.consume()
:
使用此事件,使其不会在默认情况下处理 方式由起源它的来源。
public void keyPressed(KeyEvent e)
if(e.getKeyCode() == KeyEvent.VK_ENTER)
e.consume();
button.doClick();
Documentation
【讨论】:
@PéterSzakács 太棒了!很高兴我能帮上忙。 不要使用 Key Listener。 Swing 旨在与键绑定一起使用。【参考方案2】:您应该将KeyBindings 与任何有问题的JTextComponent
一起使用。从Swing
的角度来看,KeyListeners
的级别太低了。您正在使用与 AWT
相关的概念,Swing
使用 KeyBindings
以更高的效率执行相同的任务并提供所需的结果:-)
一个小程序供你参考:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyBindingExample
private static final String key = "ENTER";
private KeyStroke keyStroke;
private JButton button;
private JTextArea textArea;
private Action wrapper = new AbstractAction()
@Override
public void actionPerformed(ActionEvent ae)
button.doClick();
;
private void displayGUI()
JFrame frame = new JFrame("Key Binding Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel(new BorderLayout(5, 5));
textArea = new JTextArea(10, 10);
keyStroke = KeyStroke.getKeyStroke(key);
Object actionKey = textArea.getInputMap(
JComponent.WHEN_FOCUSED).get(keyStroke);
textArea.getActionMap().put(actionKey, wrapper);
button = new JButton("Click Me!");
button.addActionListener(new ActionListener()
@Override
public void actionPerformed(ActionEvent ae)
System.out.format("Button Clicked :-)%n");
);
contentPane.add(textArea, BorderLayout.CENTER);
contentPane.add(button, BorderLayout.PAGE_END);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
public static void main(String[] args)
Runnable r = new Runnable()
@Override
public void run()
new KeyBindingExample().displayGUI();
;
EventQueue.invokeLater(r);
【讨论】:
以上是关于Java JTextArea KeyListener的主要内容,如果未能解决你的问题,请参考以下文章