Swing中快捷键的问题[TextArea]

问题:

在Swing的JTextArea中,我们敲回车键是换行。现在我想用Ctrl+Enter来替代,不知道这个事件应如何处理??我已经可以判断出Ctrl+Enter同时按下的情况了,但是不知道如何达到原来只按Enter的效果。对于原来的Enter键,现在的功能是想让它移到下一个控件上。

解决:

写一个继承于JTextArea的类,同时实现几种方法即刻。或是在我们自己的类中,加入如下的方法。

import hoksoftbuhin.HTextArea;

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.Hashtable;

import javax.swing.Action;
import javax.swing.KeyStroke;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.JTextComponent;
import javax.swing.text.Keymap;

/*
 * Created on 2004-8-13
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class TestArea extends HTextArea {
 private Hashtable actionTable = new Hashtable();
 
 public TestArea() {
  super();
  loadActionTable();
  setKeymap(createKeymap());
 }

 /**
  * 在Keymap中,增加对Ctrl+Enter同时按下的处理。
  * @return
  */
 private Keymap createKeymap() {
  Keymap map =
   JTextComponent.addKeymap("applet keymap", getKeymap());

  KeyStroke returnKeyStroke =
   KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.CTRL_MASK);
  Action returnAction = getAction(DefaultEditorKit.insertBreakAction);

  map.addActionForKeyStroke(returnKeyStroke, returnAction);
  return map;
 }

 
 /**
  * 获得原先动作的一个集合
  *
  */
 private void loadActionTable() {
  Action[] actions = getActions();

  for (int i = 0; i < actions.length; ++i) {
   actionTable.put(actions[i].getValue(Action.NAME), actions[i]);
  }
 }

 
 /**
  * 根据名字,来获得相应的Action
  * @param name
  * @return
  */
 private Action getAction(String name) {
  return (Action) actionTable.get(name);
 }

 
}


以上代码实现了Ctrl+Enter换行的功能。

=============================

至于屏蔽原先的Enter的功能,现在是用别的方法来替代了,没有找到真正能Remove掉该方法。

扩充一下createKeymap()方法。

 private Keymap createKeymap() {
  Keymap map =
   JTextComponent.addKeymap("applet keymap", getKeymap());

  KeyStroke returnKeyStroke =
   KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.CTRL_MASK);
  Action returnAction = getAction(DefaultEditorKit.insertBreakAction);

  map.addActionForKeyStroke(returnKeyStroke, returnAction);

KeyStroke returnKeyStroke2 =
     KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0);
  Action returnAction2 = getAction(DefaultEditorKit.endWordAction);
  map.addActionForKeyStroke(returnKeyStroke2, returnAction2);

  return map;
 }

  这样即刻取消掉原先的换行,但并没有从根本得到解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值