Swing中快捷键的问题[TextArea]

原创 2004年08月13日 11:59:00

问题:

在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;
 }

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

Java Swing快捷键和按键绑定

1. 快捷键和 http://docstore.mik.ua/orelly/java-ent/jfc/ch03_08.htm
  • dongtianlaile
  • dongtianlaile
  • 2014年04月16日 14:40
  • 7014

Java.Swing.button绑定快捷键的3种办法

1.使用button.setMnemonic方法,例如:jbtRemove.setMnemonic(java.awt.event.KeyEvent.VK_D);      注意使用这个方法只能用alt...
  • yuhui123999
  • yuhui123999
  • 2016年05月22日 21:46
  • 3693

HBuilder神奇之常用快捷键总结

Hbuilder常用快捷键总结
  • nupotian
  • nupotian
  • 2016年09月26日 22:02
  • 1915

关于Textarea的换行问题

  • 2010年06月14日 11:10
  • 2KB
  • 下载

解决textarea内容保存到MySQL再显示到html中没有换行的问题

最近在做项目时需要用一个MarkDown编辑器编写文章然后保存到数据库中,如下图所示,使用的是MdEditor 但通过后台提取数据显示到html页面中时,却发现没有换行。原来这是因为数据库把...
  • qq_23483671
  • qq_23483671
  • 2018年01月09日 21:23
  • 52

textarea和mysql中的换行符问题

今天碰到一个问题,一直无法解决,后来让stan帮我搞定了,老手解决问题就是快。 问题:我手动在phpmyadmin中输入了一段带有换行符的字符串,取出来放到中,在通过form表单提交的到一个页面。 我...
  • daijiguo
  • daijiguo
  • 2015年08月27日 09:40
  • 1200

解决textarea有换行时的数据存库及赋值问题

解决textarea有换行时的数据存库及赋值问题; 解决报错$('#description').val('测试换行 第二行'); 报错意思是字符串没有正确结束,这是因...
  • lzu2216
  • lzu2216
  • 2017年05月22日 16:53
  • 1493

Textarea插入表格table,保存到数据库。jsp页面显示表格问题

自己做的一个小项目中。在一个textarea域中加一个表格。这在不借助插件的情况下是不能做到的。于是我们找了一个国内人做的一个开源插件:Kindeditor。这款插件在国内还是没多人用的,而且本版也到...
  • xiaofeixia22222
  • xiaofeixia22222
  • 2013年08月05日 21:54
  • 2748

JQuery TextArea的取值与赋值问题

首先,说明这不是一个简单的问题! 先说取值: $("#textarea").text();//读取最近测试时候发现在firefox或Chrome中读取不出textArea的值,IE正常。 ...
  • hc1104
  • hc1104
  • 2014年01月21日 19:11
  • 4306

解决jsp从数据库中读出来的数据放进textarea显示,格式不见了的问题

1.问题背景 你有没有遇到过这样的问题? jsp中有个textarea控件,当你存数据进数据库中的时候。再取出来,放到textarea中,你会发现,样式不见了?原来好好的样式,现在排成一行了 ? ...
  • cjbhtt99
  • cjbhtt99
  • 2013年03月02日 10:30
  • 1845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swing中快捷键的问题[TextArea]
举报原因:
原因补充:

(最多只允许输入30个字)