map实例java,java keymap 实例

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.InputEvent;

import java.awt.event.KeyEvent;

import java.util.Hashtable;

import javax.swing.Action;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.KeyStroke;

import javax.swing.text.BadLocationException;

import javax.swing.text.DefaultEditorKit;

import javax.swing.text.Document;

import javax.swing.text.JTextComponent;

import javax.swing.text.Keymap;

import javax.swing.text.TextAction;

public class KeyListener {

public static void main(String[] args) {

JTextArea area = new JTextArea(6, 32);

Keymap parent = area.getKeymap();

Keymap newmap = JTextComponent.addKeymap("KeymapExampleMap", parent); //将一个新 keymap 添加到 keymap 层次结构。

KeyStroke u = KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK); //建立一个快捷键

Action actionU = new UpWord();

newmap.addActionForKeyStroke(u, actionU); //向 keymap 添加绑定。

Action actionList[] = area.getActions(); //文本域中有很多个Action

Hashtable lookup = new Hashtable();

for (int j = 0; j < actionList.length; j += 1)

lookup.put(actionList[j].getValue(Action.NAME), actionList[j]); //将每一个Action与它的名字关联,并存到哈希表中

KeyStroke L = KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK);

Action actionL = (Action) lookup.get(DefaultEditorKit.selectLineAction);

newmap.addActionForKeyStroke(L, actionL);

KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_W,InputEvent.CTRL_MASK);

Action actionW = (Action) lookup.get(DefaultEditorKit.selectWordAction);

newmap.addActionForKeyStroke(W, actionW);

area.setKeymap(newmap);

JFrame f = new JFrame("KeymapExample");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);

area.setText("This is a test.");

f.pack();

f.setVisible(true);

}

}

//创建一个行为,该行为是使选定文本都变成大写的

class UpWord extends TextAction {

/**

*

*/

private static final long serialVersionUID = -2538112975073229733L;

public UpWord() {

super("uppercase-word-action");

}

public void actionPerformed(ActionEvent e) {

JTextComponent comp = getTextComponent(e); //得到源组件

if (comp == null)

return;

Document doc = comp.getDocument();

int start = comp.getSelectionStart(); //选定文本的起始位置

int end = comp.getSelectionEnd();

try {

int left = javax.swing.text.Utilities.getWordStart(comp, start); //光标在start位置的单词的起始位置

int right = javax.swing.text.Utilities.getWordEnd(comp, end); //这样将选定的文本扩充了它的开始和结尾

String word = doc.getText(left, right - left); //得到选定的文本

doc.remove(left, right - left);

doc.insertString(left, word.toUpperCase(), null);

comp.setSelectionStart(start);

comp.setSelectionEnd(end);

} catch (BadLocationException ble) {

return;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值