java组合键_[求助]关于组合键的使用

[求助]关于组合键的使用

最近在做一个模拟中文输入的application程序.

在中间要用到 ctrl+SPACE,请问,怎么做才能实现ctrl+SPACE,怎么才能与其它的按下单一的键进行区别开来,

,还有一个小问题是,怎么来从键盘事件中捕获中文呢?

急......

[此贴子已经被作者于2007-2-6 17:44:45编辑过]----------------解决方案--------------------------------------------------------

1.KeyEvent有个getModifiers()方法

2.键盘事件中不包含中文输入的信息,如果想捕获中文输入,可以考虑使用InputMethodListener

----------------解决方案--------------------------------------------------------

我试下.

----------------解决方案--------------------------------------------------------

up.

没做成功.请大家帮一下.

代码如下.

package jdialog_test_extends;

/*********************************************

*author @scoladi

*JDialog_test JDialog_test_extends.java

**********************************************/

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class JDialog_test_extends extends JDialog implements KeyListener

{

JLabel about;

JTextField jtf;//英文下进行输入

char input;

boolean flag=false;

public JDialog_test_extends() {

this.setTitle("对话使用.测试");

about = new JLabel("JDialog使用方法测试");

about.setHorizontalAlignment(SwingConstants.CENTER);

this.getContentPane().add(about, BorderLayout.NORTH);//加入第一个组件

this.addWindowListener(new WindowAdapter()

{ /**********************/

public void windowClosing(WindowEvent e)//重写了窗口事件. 是为了能使整个进程都停下.

{ /**********************/

dispose();

System.exit(0);

}

});

JDialog.setDefaultLookAndFeelDecorated(true);//static mothed

jtf =new JTextField(10);//10 columns

this.getContentPane().add(jtf, BorderLayout.SOUTH);//加入第二个组件

jtf.addKeyListener(this);

}

public static void main(String[] args) {

JDialog_test_extends mm=new JDialog_test_extends();

mm.setBounds(400,400,100,80);

mm.pack();

mm.show();

}

public void keyPressed(KeyEvent e)

{

if(e.getKeyChar()==KeyEvent.VK_SPACE)//空格键的判断

{

/**********************/

dispose(); //通过这种方式进行,达到空格键退出的操作.

System.exit(0);//把dispose()放于此能更好的退出.

} /**********************/

else if(e.getModifiersEx()==(e.CTRL_DOWN_MASK+e.VK_SPACE ))

{

about.setText("测试 进入输入法.");

flag=true;//用来设置其输入状态的标记.

}

else

{

if(flag==true) //用于字符串的输入方法

{

about.setText("进入flag=true测试");

flag=false;

}

else //if(e.getKeyChar()!=)

{ //专门用于字符输入的方法.

String sti_chr; /*************************/

sti_chr=Character.toString(e.getKeyChar());//格式转化

about.setText(sti_chr); /*************************/

}

}

}

public void keyReleased(KeyEvent e)

{

}

public void keyTyped(KeyEvent e)

{

}

}

无法捕获ctrl+space键,且,中文无法让其展示到标签上,请帮看下.谢谢.

----------------解决方案--------------------------------------------------------

e.getModifiersEx()==(e.CTRL_DOWN_MASK+e.VK_SPACE )

这个不是这样子用滴~

应该这样:

if(e.getKeyChar()==KeyEvent.VK_SPACE){

if((e.getModifiers()&e.CTRL_DOWN_MASK)==e.CTRL_DOWN_MASK) //在按下CTRL键的情况下按下SPACE键

else //一般情况

}

另外,楼上那样子是捕获不了中文输入滴.

我说过,想要捕获中文输入,可以考虑InputMethodListener,KeyEvent里面是没有中文输入信息滴.

.

我看楼主的目的就是想获取输入法输入的字符串吧,给个现成程序代码吧:

程序代码:

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.text.*;

/**

*捕获输入法中的输入

*@author: [url=http://eastsun.javaeye.com]Eastsun[/url]

*/

public class CaptureInput extends JFrame{

public CaptureInput(){

super(\"捕获输入法输入\");

final JTextField textField =new JTextField(40);

final JTextArea textArea = new JTextArea(\"输入的字符串:\n\",10,40);

textArea.setEditable(false);

textArea.setLineWrap(true);

textField.addInputMethodListener(new InputMethodListener(){

public void inputMethodTextChanged(InputMethodEvent e){

CharacterIterator iter =e.getText();

for(char c =iter.first();c !=CharacterIterator.DONE; c=iter.next()) textArea.append(\"\"+c);

}

public void caretPositionChanged(InputMethodEvent e){}

});

getContentPane().add(textField,BorderLayout.NORTH);

getContentPane().add(textArea,BorderLayout.SOUTH);

pack();

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args){

new CaptureInput();

}

}

[此贴子已经被作者于2007-2-9 19:15:22编辑过]

----------------解决方案--------------------------------------------------------

谢谢楼上的帮助,解决了.

真是谢谢你了.

----------------解决方案--------------------------------------------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值